使用欧几里得算法查找两个数字的最大公约数和最小公倍数的 Java 程序


欧几里得算法是一种有效的算法,可以帮助我们找到两个数字的最大公约数和最小公倍数。在本文中,我们将学习编写一个 Java 程序,使用欧几里得算法找到两个数字的最大公约数和最小公倍数。

两个数字的最大公约数

最大公约数(GCD),也称为最大公因数,是能够精确地整除两个给定数字的最高公因数。现在让我们来看一个例子,并计算两个数字的最大公约数。

因数 - 在数学中,因数是可以整除给定数字的数字。

例如 - 8 可以被 1、2、4、8 整除。因此,1、2、4、8 是 8 的因数。

示例

考虑数字 8 和 16

8 的因数是:1、2、4、8

16 的因数是:1、2、4、8、16

能整除 8 和 16 的公因数是 1、2、4、8。在这些公因数中,最大的公因数是 8。因此,8 是 8 和 16 的最大公约数。

两个数字的最小公倍数

最小公倍数(LCM),也称为最小公倍数,是可以被两个给定数字整除的最小数字,即最小的公倍数。

倍数 - 在数学中,倍数是可以被给定数字整除的数字。

例如 - 8、16、24、32、... 可以被 8 整除。所以 8、16、24、32 是 8 的倍数。

示例

考虑数字:8 和 16

8 的倍数是 8、16、24、...

16 的倍数是 16、32、48、...

可以被 8 和 16 整除的公倍数是 16、32、48 等。这两个数字的最小公倍数是 16。因此,16 是 8 和 16 的最小公倍数。

现在我们将实现一个程序,使用欧几里得算法找到两个数字的最小公倍数和最大公约数,因为它是快速找到最小公倍数和最大公约数的有效方法。

欧几里得算法基于以下原理:

“如果 a>b 且 a、b 是两个整数,则 a 和 b 的最大公约数与 b 和 a 除以 b 的余数的最大公约数相同”。

欧几里得算法

  • 让我们将 a 和 b 视为两个数字

  • 如果b=0,则我们返回a作为这两个数字的最大公约数。

  • 否则,我们将a替换为b,将 b 替换为 a、b 的余数,然后递归调用 GCD 函数。

  • 找到最大公约数后,我们可以找到LCM(a, b) = (a*b) / GCD

示例

第一步是用较大的数字(36)除以较小的数字(24)并找到余数。我们可以使用模运算符(%)来做到这一点。

36 % 24 = 12

余数是 12。然后我们用较小的数字(24)除以余数(12)并找到新的余数。

24 % 12 = 0

余数为 0,这意味着我们已经找到了 24 和 36 的最大公约数。最大公约数是最后一个非零余数,即 12。

因此,24 和 36 的最大公约数是 12。我们可以通过检查 12 是否是 24 和 36 的公约数,以及是否有更大的数字可以均匀地整除 24 和 36 来确认这一点。

LCM(24,36) = (24*36)/12 = 72。

24 和 36 的最小公倍数是 72。

算法

  • 初始化两个数字。

  • 编写一个递归方法来查找数字的最大公约数。

  • 创建一个自定义类对象。

  • 使用自定义类对象从主方法调用递归方法。然后使用最大公约数的值查找数字的最小公倍数。

示例

在这个例子中,我们初始化两个数字,然后创建一个 GCD 类的对象,并使用 GCD 类对象调用 GCD 方法,并将这两个数字传递给方法并获取 gcd 值并将其存储。然后,我们通过将两个数字相乘并除以 gcd 值来计算 lcm。然后我们打印这两个数字的 lcm 和 gcd。

//Java Program to find G.C.D and L.C.M of two numbers using Euclid’s Algorithm
import java.util.*;
class Gcd{
   public  int GCD(int number1, int number2) {
      if (number2 == 0) {
         return number1;
      }
      return GCD(number2, number1 % number2);
   }
}
public class Main {
   public static void main(String[] args) {
      int number_1 = 36;
      int number_2 = 24;
      Gcd gcdObject =  new Gcd();
      int gcd = gcdObject.GCD(number_1, number_2);
      System.out.println("G.C.D of "+" "+number_1+" & "+number_2 +" is: "+gcd);
      int lcm = (number_1 * number_2) / gcd;
      System.out.println("L.C.M of "+" "+number_1+" & "+number_2 +" is: "+lcm);
   }
}

输出

G.C.D of  36 & 24 is: 12
L.C.M of  36 & 24 is: 72

因此,在这篇文章中,我们使用 Java 编程中的欧几里得算法计算了两个数字的最大公约数和最小公倍数。

更新于: 2023 年 4 月 10 日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告