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 }

浙公网安备 33010602011771号