最大公约数(Greatest Common Divisor,缩写为GCD)是指两个或多个整数共有的最大的约数。
这里用欧几里得算法实现求两个数的最大公约数。
欧几里得算法:两个整数a和b的最大公约数等于a除以b的余数c和b之间的最大公约数。
代码实现:
public static int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
时间复杂度为O(log(min(a, b)))
下面以计算 24 和 36 的最大公约数为例:
- 初始化 a = 36,b = 24。
- 因为 b 不等于 0,继续计算。
- 计算 36 除以 24 的余数得到 12。
- 将 b 的值 24 赋给 a,将余数 12 赋给 b。
- 现在 a = 24,b = 12。
- 因为 b 不等于 0,继续计算。
- 计算 24 除以 12 的余数得到 0。
- 将 b 的值 12 赋给 a,将余数 0 赋给 b。
- 现在 a = 12,b = 0。
- 因为 b 等于 0,停止计算。
- 返回最终的 a,即为最大公约数,此处为 12。
因此,24 和 36 的最大公约数为 12。
下面为求多个数的最大公约数
public class Main {
public static void main(String[] args) {
int[] numbers = {24, 36, 48, 60};
int gcd = findGCD(numbers);
System.out.println("最大公约数:" + gcd);
}
private static int findGCD(int[] numbers) {
int result = numbers[0];
for (int i = 1; i < numbers.length; i++) {
result = findGCD(result, numbers[i]);
}
return result;
}
private static int findGCD(int a, int b) {
if (b == 0) {
return a;
} else {
return findGCD(b, a % b);
}
}
}