Gcd的原理理解

Ps:最小公倍数=a*b/gcd(a,b)

a除以b的商为p,余数为q,a=b*p+q,gcd(b,q)可以整除a和b,因此gcd(b,q)也能整除gcd(a,b);反过来,gcd(a,b)也能整除gcd(b,q),即gcd(a,b)=gcd(b,a%b)。这样不断下去,得到gcd(c,0),c和0的最大公约数为c,即gcd(a,b)=gcd(c,0)=c

1 int gcd(int a,int b)
2 {
3     if(b==0) return a;
4   return gcd(b,a%b);
5 }
int gcd(int a,int b)
{
    return a%b?gcd(b,a%b):b;
}

 

不用递归,用迭代:

 1 int gcd(int a,int b)
 2 {
 3     while(b!=0)
 4 {
 5   int c=a%b;
 6   a=b;
 7   b=c
 8 }
 9   return a;
10 }

 

posted @ 2017-04-07 11:12  hchacha  阅读(642)  评论(0)    收藏  举报