辗转相除法求最大公约数
辗转相除发的关键在一个恒等式:gcd(a,b)=gcd(b,a mod b),它和边界条件gcd(a,0)=a一起构成如下的递归程序
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
这个算法又称为欧几里德算法,用于计算整数a、b的最大公约数。基于以上算法得出计算a,b的最小公倍数的算法如下:
int lcm(int a,int b){
//为了防止溢出,不能写成 return a*b/gcd(a,b);
// return a/gcd(a,b)*b;
}