跳到主要内容

Java程序找出两个数字的最大公约数

要理解这个示例,你应该具备以下 Java 编程 主题的知识:

两个整数的最大公约数(HCF 或 GCD)是能够完全整除这两个数(没有余数)的最大整数。

示例 1:使用 for 循环和 if 语句找出两个数字的最大公约数

class Main {
public static void main(String[] args) {

// 找出 n1 和 n2 的最大公约数
int n1 = 81, n2 = 153;

// 初始设定为 gcd
int gcd = 1;

for (int i = 1; i <= n1 && i <= n2; ++i) {

// 检查 i 是否能够完全整除 n1 和 n2
if (n1 % i == 0 && n2 % i == 0)
gcd = i;
}

System.out.println(n1 + " 和 " + n2 + " 的最大公约数是 " + gcd);
}
}

输出

81153 的最大公约数是 9

在这里,需要找出 GCD 的两个数字分别存储在 n1n2 中。

然后,执行一个 for 循环直到 i 小于 n1n2。这样,就能迭代出 1 到这两个数中较小的数之间的所有数字,以找到 GCD。

如果 n1n2 都可以被 i 整除,gcd 就设置为这个数字。这个过程一直进行,直到找到最大的数字(GCD),它能够在没有余数的情况下整除 n1n2

我们也可以使用 while 循环解决这个问题,如下所示:

示例 2:使用 while 循环和 if else 语句找出两个数字的最大公约数

class Main {
public static void main(String[] args) {

// 找出 n1 和 n2 的最大公约数
int n1 = 81, n2 = 153;

while(n1 != n2) {

if(n1 > n2) {
n1 -= n2;
}

else {
n2 -= n1;
}
}

System.out.println("最大公约数: " + n1);
}
}

输出

最大公约数: 9

这是找出 GCD 的更好方法。在这种方法中,较小的整数从较大的整数中减去,结果赋给持有较大整数的变量。这个过程一直进行,直到 n1n2 相等。

以上两个程序只有在用户输入正整数时才能正常工作。下面是对第二个示例的一点修改,以便找出正整数和负整数的最大公约数。

示例 3:正整数和负整数的最大公约数

class GCD {
public static void main(String[] args) {

int n1 = 81, n2 = -153;

// 始终设为正数
n1 = ( n1 > 0) ? n1 : -n1;
n2 = ( n2 > 0) ? n2 : -n2;

while(n1 != n2) {

if(n1 > n2) {
n1 -= n2;
}

else {
n2 -= n1;
}
}

System.out.println("最大公约数: " + n1);
}
}

输出

最大公约数:

9