袁家伟

导航

返璞归真——GCD(辗转相除法)

不知为何,最大公约数和最小公倍数总是记不住,今天决定特意写一篇博客,以后自己再忘也有个找资料复习的地方。

最大公约数:也成最大公因数,最大公因子,指两个或者多个整数共有约数中最大的一个。

最小公倍数:两个或多个整数共有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

 

对于最小公倍数,数学上,一般用(a,b)来表示a和b的最大公约数,用[a,b]来表示a和b的最小公倍数

有定理:( a,b )* [ a ,  b ] =a*b;即两数的积与对应最大公约数和最小公倍数的乘积相同。

计算最大公约数一般用:辗转相除法;

对于 a=b*q+r, 有 (a,b)==(b,r),证明不再叙述。

及:a,b的最大公约数,可有(b,(a/b))得到;

  辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

a=q*b+r;  都为整数               gcd(a,b)=gcd(b,r);

gcd(a,b)=gcd(b, a mod b );
代码如下:

long long gcd(long long a,long long b)
{
    return b==0?a:gcd(b,a%b);    
} 

当计算出最大公约数后,最小公倍数可有成绩相等这一定理得到。

以上

 

posted on 2020-02-20 22:24  袁家伟  阅读(248)  评论(0编辑  收藏  举报