📅  最后修改于: 2023-12-03 15:15:13.781000             🧑  作者: Mango
GCD (Greatest Common Divisor) 是指两个或多个整数的最大公约数,是数学中的一个重要概念。
在 Java 中,可以使用以下几种方式来计算两个数的 GCD。
最简单的方式是使用暴力枚举法计算两个数的 GCD。该方法的时间复杂度为 O(min(a,b))。
public static int gcd(int a, int b) {
int gcd = 1;
for (int i = 1; i <= a && i <= b; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
}
}
return gcd;
}
辗转相减法是一种更为高效的算法,时间复杂度为 O(max(a,b))。
public static int gcd(int a, int b) {
if (a == b) {
return a;
}
if (a > b) {
return gcd(a - b, b);
}
return gcd(a, b - a);
}
更相减损术与移位结合法的时间复杂度为 O(log(max(a,b))),是一种更加高效的算法。
public static int gcd(int a, int b) {
if (a == b) {
return a;
}
if (a == 0) {
return b;
}
if (b == 0) {
return a;
}
if ((a & 1) == 0 && (b & 1) == 0) {
return gcd(a >> 1, b >> 1) << 1;
} else if ((a & 1) == 0 && (b & 1) != 0) {
return gcd(a >> 1, b);
} else if ((a & 1) != 0 && (b & 1) == 0) {
return gcd(a, b >> 1);
} else {
int big = a > b ? a : b;
int small = a < b ? a : b;
return gcd(big - small, small);
}
}
以上就是三种常见的求 GCD 的方式。在实际应用中,最好选用更加高效的算法来计算 GCD,以实现更快的运算速度。