求最大公约数,辗转相除法和更相减损法
比如求32和12的最大公约数
用辗转相除法如下:
32 12
12 (32%12)=8
8 (12%8)=4
4 (4%4)=0
第一个数是上次运算中小的那个数,第二个数是求余得到的。
当出现零时,另一个数就是最大公约数。
用更相减损法:
12 32
12 (32-12)=20
12 (20-12)=8
8 (12-8)=4
4 (8-4)=4
第一个数是上次运算中小的那个数, 第二个数是两个数相减得到的。
当两个数出现相等时,这个数就是最大公约数
辗转相除法的代码实现如下:
递归实现:
int f(a, b)//a>b
{
return b==0?a:f(b,a%b);
}
循环实现:
while (y%x!=0) //x<y
{
int temp = x;
x = y%x;
y = temp;
}//循环结束后x为最大公约数
最小公倍数
最小公倍数在求出最大公约数后 两个数相乘除以最大公约数就是最小公倍数