21xrx.com
2024-09-17 04:38:02 Tuesday
登录
文章检索 我的文章 写文章
【文章标题】Java编程实现求最大公约数和最小公倍数的三种方案
2023-06-14 13:55:42 深夜i     --     --
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,而不是仅仅为了“用最简单的方法实现”而执着于自己编写的程序。

【三个

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复