您的位置:首页 > 其它

文章标题 欧几里得求两数的最大公约数,最小公倍数。

2016-09-11 21:52 309 查看
求有两个数a,b的最大公约数。

假设a>b;

设 a = kb + c;

设 a 和 b 的最大公约数为 d ,则可得

a = p * d; b = q * d ;

则 c = a - kb = p*d - k*b = p*d -k*q*d =( p - k*q ) * d;

因为p,q 互质,所以p 与 p - k*q 互质,所以c,b的最大公约数为d。

所以求a、b的最大公约数就是就b,与a%b的最大公约数,直到整除为止。

下面给出两种方法:

递归:

int gcd ( int a, int b ) {
if ( b==0 ) return a;
return gcd ( b, a%b );
}


循环体

int gcd ( int a, int b ) {
while ( b!=0 ) {
int temp=a%b;
a=b;
b=temp;
}
return a;
}


当求出a,b的最大公约数后,就很容易求出两数的最小公倍数了

只要

gbd ( a , b ) =a/gcd(a,b)*b

先除再乘是防止爆int
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最大公约数