原文: https://beginnersbook.com/2018/09/java-program-to-find-gcd-of-two-numbers/

两个数字的 GCD(最大公约数)是最大的正整数,它将两个数字整除而不留任何余数。例如。 30 和 45 的 GCD 是 15。GCD 也称为 HCF(最高公因子)。在教程中,我们将编写几个不同的 Java 程序来找出两个数字的 GCD。

如何在纸上找出 GCD?

为了找出两个数字的 GCD,我们将公因子乘以如下图所示:

Java 程序:查找两个数字的 GCD - 图1

示例 1:使用for循环查找两个数字的 GCD

在这个例子中,我们使用for循环找到两个给定数字的 GCD。

我们正在运行一个 for 循环,从 1 到较小的数字和内部循环,我们将这两个数字除以循环计数器i,范围从 1 到较小的数字值。如果i的值除以两个数字而没有余数,那么我们将该值赋给变量gcd。在循环结束时,变量gcd将具有最大数字,该数字除以两个数字而没有余数。

  1. public class GCDExample1 {
  2. public static void main(String[] args) {
  3. //Lets take two numbers 55 and 121 and find their GCD
  4. int num1 = 55, num2 = 121, gcd = 1;
  5. /* loop is running from 1 to the smallest of both numbers
  6. * In this example the loop will run from 1 to 55 because 55
  7. * is the smaller number. All the numbers from 1 to 55 will be
  8. * checked. A number that perfectly divides both numbers would
  9. * be stored in variable "gcd". By doing this, at the end, the
  10. * variable gcd will have the largest number that divides both
  11. * numbers without remainder.
  12. */
  13. for(int i = 1; i <= num1 && i <= num2; i++)
  14. {
  15. if(num1%i==0 && num2%i==0)
  16. gcd = i;
  17. }
  18. System.out.printf("GCD of %d and %d is: %d", num1, num2, gcd);
  19. }
  20. }

输出:

  1. GCD of 55 and 121 is: 11

示例 2:使用while循环查找两个数字的 GCD

让我们使用while循环编写相同的程序。在这里,我们采用不同的方法来寻找 gcd。在这个程序中,我们从较大的数字中减去较小的数字,直到它们变得相同。在循环结束时,数字的值将相同,并且该值将是这些数字的 GCD。

  1. public class GCDExample2 {
  2. public static void main(String[] args) {
  3. int num1 = 55, num2 = 121;
  4. while (num1 != num2) {
  5. if(num1 > num2)
  6. num1 = num1 - num2;
  7. else
  8. num2 = num2 - num1;
  9. }
  10. System.out.printf("GCD of given numbers is: %d", num2);
  11. }
  12. }

输出:

  1. GCD of given numbers is: 11

示例 3:查找两个输入(由用户输入)数字的 GCD

在这个例子中,我们使用Scanner从用户获取输入。用户将输入两个数字的值,程序将找到这些输入数字的 GCD。

  1. import java.util.Scanner;
  2. public class GCDExample3 {
  3. public static void main(String[] args) {
  4. int num1, num2;
  5. //Reading the input numbers
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.print("Enter first number:");
  8. num1 = (int)scanner.nextInt();
  9. System.out.print("Enter second number:");
  10. num2 = (int)scanner.nextInt();
  11. //closing the scanner to avoid memory leaks
  12. scanner.close();
  13. while (num1 != num2) {
  14. if(num1 > num2)
  15. num1 = num1 - num2;
  16. else
  17. num2 = num2 - num1;
  18. }
  19. //displaying the result
  20. System.out.printf("GCD of given numbers is: %d", num2);
  21. }
  22. }

输出:

  1. Enter first number:30
  2. Enter second number:250
  3. GCD of given numbers is: 10

下面是几个相关的 java 例子:

  1. Java 程序:找到 factorial 数
  2. Java 程序:显示 Fibonacci 系列
  3. Java 程序:找到三个数字中最大的数字