21xrx.com
2024-11-22 12:33:09 Friday
登录
文章检索 我的文章 写文章
JAVA求最大公约数和最小公倍数代码
2023-06-12 12:35:56 深夜i     --     --
JAVA 最大公约数 最小公倍数 代码

JAVA是一种面向对象的编程语言,在计算机编程中被广泛使用。在编写程序时,我们经常需要求最大公约数和最小公倍数。以下是JAVA求最大公约数的四种方法:

1. 辗转相除法

辗转相除法(又称欧几里得算法)是一种简单而有效的求最大公约数的方法。它的原理是:设a、b为两个正整数,求它们的最大公约数。用a除以b,得到余数r,如果r等于0,则b就是a和b的最大公约数;否则,把b赋值为r,a赋值为b,再进行一次相除操作,直到余数为0。

代码实现如下:

public static int gcd(int a, int b) {

  if (a < b)

    int temp = a;

    a = b;

    b = temp;

  int r = a % b;

  if (r == 0)

    return b;

   else {

    return gcd(b, r);

  }

}

2. 穷举法

穷举法是一种暴力搜索的方法,它逐个枚举a和b的所有可能的公约数,直到找到最大的公约数。代码实现如下:

public static int gcd(int a, int b) {

  int gcd = 1;

  for (int i = 1; i <= a && i <= b; i++) {

    if (a % i == 0 && b % i == 0)

      gcd = i;

  }

  return gcd;

}

3. 取余法

最大公约数是两个数的公共因子中最大的一个,而两个数的余数也具有一定的规律性。利用这个规律,可以通过取余运算来快速求得最大公约数。代码实现如下:

public static int gcd(int a, int b) {

  while (b != 0)

    int r = a % b;

    a = b;

    b = r;

  return a;

}

4. 二分法

二分法又称为更相减损术,它可以快速地求出两个数的最大公约数。它的原理是:如果a和b都是偶数,那么它们的最大公约数等于它们的一半的最大公约数;如果a和b其中一个为偶数,那么把偶数除以2,继续求最大公约数;如果a和b都是奇数,那么用更相减损术求最大公约数,即用大数减去小数,得到差,再求这个差的最大公约数。

代码实现如下:

public static int gcd(int a, int b) {

  if (a < b)

    int temp = a;

    a = b;

    b = temp;

  if (b == 0)

    return a;

   else if ((a & 1) == 0 && (b & 1) == 0) {

    return gcd(a >> 1, b >> 1) << 1;

  } else if ((a & 1) == 0 && (b & 1) != 0) {

    return gcd(a >> 1, b);

  } else if ((a & 1) != 0 && (b & 1) == 0) {

    return gcd(a, b >> 1);

  } else {

    return gcd(b, a - b);

  }

}

除了最大公约数,JAVA还可以求最小公倍数。最小公倍数是两个数的公共倍数中最小的一个,它可以通过最大公约数求出。代码实现如下:

public static int lcm(int a, int b) {

  return a * b / gcd(a, b);

}

综上所述,JAVA求最大公约数和最小公倍数有很多种方法,每种方法都有其适用的场景。在实际编程中,需要结合具体情况选择合适的方法来求解问题。

  
  

评论区

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