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

要理解此示例,您应了解以下Java编程主题


两个整数的HCF或GCD是能整除两个数(无余数)的最大整数。

示例1:使用for循环和if语句查找两个数的GCD

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

    // find GCD between n1 and n2
    int n1 = 81, n2 = 153;
    
    // initially set to gcd
    int gcd = 1;

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

      // check if i perfectly divides both n1 and n2
      if (n1 % i == 0 && n2 % i == 0)
        gcd = i;
    }

    System.out.println("GCD of " + n1 +" and " + n2 + " is " + gcd);
  }
}

输出

GCD of 81 and 153 is 9

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

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

如果n1n2都能被i整除,则gcd被设置为该数字。这会一直持续到找到能整除n1n2且无余数的最大数字(GCD)。


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

示例2:使用while循环和if else语句查找两个数的GCD

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

    // find GCD between n1 and n2
    int n1 = 81, n2 = 153;
    
    while(n1 != n2) {
    
      if(n1 > n2) {
        n1 -= n2;
      }
      
      else {
        n2 -= n1;
      }
    }

    System.out.println("GCD: " + n1);
  }
}

输出

GCD: 9

这是查找GCD的更好方法。在此方法中,将较小的整数从较大的整数中减去,并将结果赋给保存较大整数的变量。此过程一直持续到n1n2相等为止。

上面的两个程序仅在用户输入正整数时才按预期工作。下面是对第二个示例进行的小修改,用于查找正负整数的GCD。


示例3:正负数GCD

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

    int n1 = 81, n2 = -153;

    // Always set to positive
    n1 = ( n1 > 0) ? n1 : -n1;
    n2 = ( n2 > 0) ? n2 : -n2;

    while(n1 != n2) {
        
      if(n1 > n2) {
        n1 -= n2;
      }
      
      else {
        n2 -= n1;
      }
    }
    
    System.out.println("GCD: " + n1);
  }
}

输出

GCD: 9

另请阅读

在结束之前,让我们来测试一下您对Java程序查找两个数的GCD的了解!您能解决以下挑战吗?

挑战

编写一个函数来计算两个数的HCF。

  • HCF(最高公因子)是能整除两个数而没有余数的最大数。
  • 例如,**12**和**15**的HCF是**3**,因为**3**是能整除**12**和**15**而没有余数的最大数。
  • 返回num1num2的HCF。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战