如何编写Java函数来实现Euclid算法来计算最大公约数gcd(m,n)

时间:2016-08-29 16:23:15

标签: java algorithm function greatest-common-divisor

我需要编辑主函数来计算(m,n)所有m和n在2到10之间,但我不知道该怎么做。

我需要编写一个Java函数来实现Euclid算法来计算最大公约数gcd(m,n),这是除以m和n的最大整数k。

当循环停止时,gcd以m为单位。将gcd()函数添加到NumericFunctions类,并在main()中包含代码,以计算2到10之间所有m和n的gcd(m,n)。

源代码:

public class NumericFunctions {

   public static long factorial(int n) {

      long result = 1;

      for (int i = 2; i <= n; i++) {

         result *= i;
      }
      return result;
   }

   public static int gcd (int n, int m) {

      if ((m % n) == 0) 

         return n;

      else

         return gcd(n, m % n);
}

     public static void main(String[] args) {

         for (int n = 1; n <= 10; n++)

            for (int m = 1; m <= 10; m++){

               System.out.println(gcd(n,m));

               System.out.println(" ");


            }
      }

1 个答案:

答案 0 :(得分:2)

您的gcd()函数(例如gcd(2, 1);)中存在无限递归。所以,为这样的事情改变你的功能

public static int gcd (int n, int m) {

    if (m > n) {
      if ((m % n) == 0) 
         return n;
      else
         return gcd(n, m % n);
    }
    else {
        if ((n % m) == 0) 
             return m;
          else
             return gcd(m, n % m);
    }
}

public static void main(String[] args) {    

    for (int n = 1; n <= 10; n++) {

        for (int m = 1; m <= 10; m++) {
            System.out.println("n: " + n + " m: " + m + " gcd: " + gcd(n, m));
        }
    }
}