辗转相除法求最大公约数

辗转相除发的关键在一个恒等式: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;

}

 

posted on 2013-06-29 20:33  opener  阅读(95)  评论(0编辑  收藏  举报

导航