21xrx.com
2025-03-26 10:08:07 Wednesday
文章检索 我的文章 写文章
【文章标题】Java编程实现求最大公约数和最小公倍数的三种方案
2023-06-14 13:55:42 深夜i     14     0
Java编程 最大公约数 最小公倍数

【文章标题】Java编程实现求最大公约数和最小公倍数的三种方案

【文章内容】

在 Java 编程中,求两个数的最大公约数和最小公倍数是常见的数学计算问题。本文将介绍三种不同的 Java 编程方案,来实现这一问题的解决。

一、暴力循环法

暴力循环法是最基本的计算方法,它的原理是从两个数中较小的数开始循环,逐个尝试能否同时被两个数整除,直到找到两个数的最大公约数和最小公倍数。具体的实现代码如下:

public class CommonDivisorMultiple {
  public static int[] calculate(int a, int b) {
    int[] nums = new int[2];
    for (int i = Math.min(a, b); i >= 1; i--) {
      if (a % i == 0 && b % i == 0) {
        nums[0] = i;
        break;
      }
    }
    nums[1] = a * b / nums[0];
    return nums;
  }
}

二、辗转相除法

辗转相除法也称为欧几里得算法,它的原理是用较大数除以较小数,再用余数去除较小数,直到余数为 0,这时除数即为两个数的最大公约数,最小公倍数则可通过最大公约数计算得出。具体的实现代码如下:

public class CommonDivisorMultiple {
  public static int[] calculate(int a, int b) {
    int[] nums = new int[2];
    int x = Math.max(a, b), y = Math.min(a, b), z = 0;
    while (y != 0)
      z = x % y;
      x = y;
      y = z;
    
    nums[0] = x;
    nums[1] = a * b / x;
    return nums;
  }
}

三、Java 内置函数法

在 Java 中,提供了 gcd() 和 lcm() 两个内置函数,分别用于计算两个数的最大公约数和最小公倍数。具体的实现代码如下:

public class CommonDivisorMultiple {
  public static int[] calculate(int a, int b) {
    int[] nums = new int[2];
    nums[0] = Math.abs(BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).intValue());
    nums[1] = Math.abs(BigInteger.valueOf(a).multiply(BigInteger.valueOf(b)).divide(BigInteger.valueOf(nums[0])).intValue());
    return nums;
  }
}

通过对比三种 Java 编程方案所得到的结果,可以发现,使用内置函数法所消耗的时间最短。这也说明了,编程时我们应该尽可能利用现有的API,而不是仅仅为了“用最简单的方法实现”而执着于自己编写的程序。

【三个

  
  

评论区