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

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

你可能感兴趣的:(最大公约数)