更相减损术定义:
点击我观看“百度百科-更相减损术”,对于更相减损术,百度百科肯定解释的比我好,当然我也看了百度的解释,大家慢慢食用,理解之后再来看代码更好理解!
编码实现:
public class Test {
public static void main(String[] args) {
// 测试,该测试数据来源于“百度百科-更相减损术”
System.out.println(gcd(260, 104));
}
/**
* 计算两数的最大公约数
* @param a 数据
* @param b 数据
* @return 最大公约数
*/
public static int gcd(int a, int b) {
// 存储两数最多能同时除尽2的总次数
int count = 0;
// 让两数同时除以2,该思想来源于“百度百科-更相减损术”
while (a % 2 == 0 && b % 2 == 0) {
a /= 2;
b /= 2;
count++;
}
// 只要两数不等,那就让大数减去小数,该思想来源于“百度百科-更相减损术”
while (a != b) {
if (a > b) {
a -= b;
} else {
b -= a;
}
}
// 返回最大公约数,计算思想来源于“百度百科-更相减损术”
return a*(int)Math.pow(2, count);
}
}
结果:
52