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

来源:互联网 发布:手机玩电音的软件 编辑:程序博客网 时间:2024/06/08 07:32

求有两个数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

0 0
原创粉丝点击