/**
* 获取最大公约数(The greatest common divisor)
*
* 辗转相除法与更相减损法相结合
*/
public static Integer getGCD(Integer num1, Integer num2) {
//当两数相等时,返回该数
if (num1.equals(num2)) {
return num1;
}
//保证num1永远大于等于num2
if (num1 < num2) {
return getGCD(num2, num1);
} else {
//与1做按位运算,判断是否为偶数
boolean num1IsEven = (num1 & 1) == 0;
boolean num2IsEven = (num2 & 1) == 0;
if (num1IsEven && num2IsEven) //如果都为偶数
return getGCD(num1 >> 1, num2 >> 1) << 1;
else if (num1IsEven) //如果num1为偶数,num2为奇数
return getGCD(num1 >> 1, num2);
else if (num2IsEven) //如果num1为奇数,num2为偶数
return getGCD(num1, num2 >> 1);
else //如果都为奇数
return getGCD(num2, num1 - num2);
}
}
算法小记(1)——求最大公约数
最新推荐文章于 2022-07-29 16:04:30 发布