求两个整数的最大公约数,使用有参数和无参数两种方式分别实现Java实现
时间: 2024-10-14 18:12:12 浏览: 31
求两个正整数m、n的最大公约数 Java语言实现
5星 · 资源好评率100%
求两个整数的最大公约数(GCD)在Java中可以采用多种方法实现,包括欧几里得算法(Euclidean Algorithm)和更相减损术。以下是两种方式的Java代码示例:
### 1. 使用有参数的递归实现 (Euclidean Algorithm)
```java
public class GCD {
public static int gcd(int num1, int num2) {
if (num2 == 0) {
return num1;
} else {
return gcd(num2, num1 % num2);
}
}
// 示例
public static void main(String[] args) {
int a = 48, b = 18;
System.out.println("The GCD of " + a + " and " + b + " is: " + gcd(a, b));
}
}
```
### 2. 使用无参数的静态方法实现 (欧几里得算法优化版)
```java
public class GCD {
// 使用常量池避免重复计算
private static final int[] DECREMENT_TABLE = {0, 1, 1, 0, -1, -1, 0, 1};
public static int gcd() {
int x = Integer.rotateLeft(args[0], 16); // 将第一个数左移16位相当于乘以16^15
int y = args[1];
while (true) {
int c = x ^ y; // 异或操作
x = y;
y = c;
if (x < y) {
int temp = x;
x = y;
y = temp;
}
if (y == 0) {
return x >>> 16; // 右移16位除以2^16得到实际的GCD
}
}
}
// 示例
public static void main(String[] args) {
int[] numbers = {48, 18};
System.out.println("The GCD of " + numbers[0] + " and " + numbers[1] + " is: " + gcd(numbers));
}
}
```
请注意,上述无参数版本假设输入数组args包含两个整数。你可以将这两个示例中的`main`函数中的参数替换为你需要求最大公约数的实际整数。
阅读全文