您的位置:首页 > 其它

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

2016-04-09 11:02 489 查看
求解两个数的最大公约数和最小公倍数

首先最小公倍数的求解是依赖于最大公约数的,因为

最小公约数 = 两个整数的乘积 / 最大公约数

最大公约数的求解

(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的最小公倍数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: