用C求解两个数的最大公约数和最小公倍数

求解两个数的最大公约数和最小公倍数
首先最小公倍数的求解是依赖于最大公约数的,因为
最小公约数 = 两个整数的乘积 / 最大公约数
最大公约数的求解
(1)使用辗转相除法:
假设两个整数x和y:
第一步,求得x和y的余,即c = x%y;
第二步,判断c是否为0, 若为0,则说明y是两个数的最大公约数;否则需要将y赋值给x,将c赋值给y,再次执行第一步,直到判断出最大公约数为止。

void GCD_LCD(int x, int y)      //求公约数和公倍数
{
    int m, n, c;
    m = x, n = y;
    while(y !=0)        //辗转相除求最大公约数
    {
        c = x%y;
        x = y;
        y = c;
    }
    printf("最大公约数 %d\n",x);
    printf("最小公倍数 %d\n",m*n/x);
}

函数中while循环也可以改成如下:

while((c = x % y) !=0 )
{
    x = y;
    y = c;
}
printf("最大公约数 %d\n",y);
printf("最小公倍数 %d\n",m*n/y);

(2)使用相减法:
假设两个整数x和y。
第一步,判断两个数是否相等,只要不相等,则
第二步,判断两个数中较大者,然后将两个数的差保存在较大者中,返回第一步,直到两个数相等,则说明当前的值为最大公约数。

void GCD_LCD(int x, int y)  //相减法求解最大公约数
{
    int m, n;
    m = x; n = y;
    while(x != y)
    {
        if(x>y)
            x = x-y;    //原先最大的数保存两个数的差
        else
            y = y-x;
    }
    printf("最大公约数是:%d\n",x);
    printf("最小公倍数是:%d\n",m*n/x);
}

(3)还有一种是穷举法:
用穷举发求最大公约数。
假设两个整数x和y。设置一个数,从1开始,只要x和y都能同时被这个数整除,则记录下来这个数,否则不记录,然后该数递增,直到当前这个数大于x和y的任意一个,则记录下来的数即为最大公约数。也让这个数从x和y中任意一个开始,只要x和y都能同时被这个数整除,则直接输出该数,否则该数递减,再判断。直至x和y同时被当前数整除。
用穷举法求解最小公倍数。
假设两个整除x和y。设置一个数从x和y任意一个开始,只要该数能同时被x和y整除,则该数为最小公倍数,否则该数递增,直到满足条件,即为x和y的最小公倍数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值