/**
* 欧几里得算法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。
*/
private static int gcdV1(int a,int b){
int big = a > b ? a : b;
int small = a < b ? a : b;
if (big % small == 0){
return small;
}
return gcdV1(small,big % small);
}
/**
* 更相减损术:两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。
*/
private static int gcdV2(int a,int b){
if (a == b){
return a;
}
int big = a > b ? a : b;
int small = a < b ? a : b;
return gcdV2(big-small,small);
}
private static int gcd(int a,int b){
if (a == b){
return a;
}
//当a和b均为偶数时,gcd(a,b)=2*gcd(a/2,b/2)=2*gcd(a>>1,b>>1)
if ((a & 1)==0 && (b & 1)==0){
return
java实现三种方式求最大公约数
本文介绍了三种Java实现求最大公约数的方法:欧几里得算法(效率较低,涉及取模运算)、更相减损术(当两数相差悬殊时效率低,递归次数过多)以及结合两者和移位运算的优化方案,以解决各自存在的问题。
摘要由CSDN通过智能技术生成