一、欧几里得算法
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
二、Stein算法
对于很大的数,用高精度表示,用欧几里得算法的话大数除法比较麻烦。
用这个算法会比较简单,只用到除2与加减运算。
下面的代码摘自这个网址,罪过罪过^_^
http://www.blogjava.net/renyangok/archive/2007/12/15/167956.html
int gcd(int a,int b){ if(a<b){ //arrange so that a>b int temp = a; a = b; b=temp; } if(0==b)//the base case return a; if(a%2==0 && b%2 ==0) //a and b are even return 2*gcd(a/2,b/2); if ( a%2 == 0) // only a is even return gcd(a/2,b); if ( b%2==0 ) // only b is even return gcd(a,b/2); return gcd((a+b)/2,(a-b)/2); // a and b are odd }
求多个数的最大公约数就多用几次欧几里得吧。