21xrx.com
2024-12-27 15:52:37 Friday
登录
文章检索 我的文章 写文章
Java算法实践:辗转相除法、穷举法、更相减损法、Stein算法详解
2023-06-16 21:26:11 深夜i     --     --
Java算法实践 辗转相除法 穷举法 更相减损法 Stein算法

Java算法实践:辗转相除法、穷举法、更相减损法、Stein算法详解

Java作为一门广泛应用于计算机科学和工业领域,算法应用非常普遍,因此不同的算法也非常重要。在本文中,我们将介绍Java中四种最常见的算法:辗转相除法、穷举法、更相减损法和Stein算法。我们将详细讲解每种算法的工作原理和实现,并附带相应的Java代码示例。

辗转相除法

辗转相除法,也称为欧几里得算法,是确定两个整数的最大公因数的一种快速方法。这个算法是在BCD中使用和发现的,但它早在欧几里得的时间就已知。辗转相除法的基本思想是利用较小数除以较大数,再取两者的余数,不断重复这个过程,直到余数为零为止。最后一个非零的余数就是这两个数的最大公因数。

Java代码示例:


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

  if (b == 0)

    return a;

  

  return gcd(b, a % b);

}

穷举法

穷举法是一种不太高效的算法,适用于问题规模较小的情况。在这种算法中,我们尝试使用所有可能的解,并逐个验证每个解。

Java代码示例:


public static void bruteForce(int number) {

  for (int i = 1; i <= number; i++) {

    if (number % i == 0) {

      System.out.println(i);

    }

  }

}

更相减损法

更相减损法,也称为短除法,是确定两个数的最大公因数的一种方法。该算法使用两个整数相减,如果两个整数相等,则它们的最大公因数是它们本身,否则继续执行步骤,将两个差重复相减,直到它们彼此相等。

Java代码示例:


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

  if (a == b)

    return a;

  

  if (a > b) {

    return gcd(a - b, b);

  }

  return gcd(a, b - a);

}

Stein算法

Stein算法也称为二进制GCD算法或二进制辗转相除法,是计算两个整数的最大公约数的一种算法。Stein算法可以使用递归或迭代实现,并且对于非常大的数字可以非常快。

Java代码示例:


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

  if (a == 0)

    return b;

  

  if (b == 0)

    return a;

  

  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(Math.abs(a - b), Math.min(a, b));

  }

}

  
  

评论区

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