欧几里得算法(辗转相除法)

辗转相除法可以用来计算两个整数的最大公因数(Dcd)。

利用辗转相除法求最大公因数的步骤如下:

第一步:用较大的数m除以较小的数n得到一个商q0和一个余数r0

第二步:若r0=0,则n为m,n的最大公因数;若r0≠0,则用除数n除以余数r0得到一个商q1和一个余数r1

第三步:若r1=0,则r1为m,n的最大公因数;若r1≠0,则用除数r0除以余数r1得到一个商q2和一个余数r2

……

依次计算直至rn=0,此时所得到的rn-1即为所求的最大公因数。

 

简单来说,如果有两个正整数m,n(m>n),则m与n的最大公因数等于n和m%n的最大公因数,若n=0,m和n的最大公因数等于m。

int Gcd(int m,int n)        //假定m>n
{
  if(n==0)
     return m;
  else
     return Gcd(n,m%n);
}

如果要求两个数的最小公倍数,只需先求出gcd,再把两数之积除以Gcd即可。

 

补充一个定理:
如果M>N,则M mod N<M/2。

证明:

存在两种情况。如果N<=M/2,则由于余数小于N,故定理成立。如果N>M/2,此时M仅含有一个N,从而余数为M-N<M/2,定理得证。

 

posted @ 2015-03-28 21:52  邀月独斟  阅读(1959)  评论(0编辑  收藏  举报