2016-08-29 3 views
-5

2と10の間のすべてのmとnに対して(m、n)を計算するmain関数を編集する必要があります。私はそうする方法がわかりません。ユークリッドの最大公約数を計算するためのアルゴリズムを実装するためのJava関数の記述方法gcd(m、n)

私は、最大公約数gcd(m、n)を計算するためのEuclidのアルゴリズムを実装するために、Java関数を記述する必要があります。これは、mとnの両方を分割する最大の整数kです。

ループが停止すると、gcdはmです。 NumericFunctionsクラスにGCD()関数を追加し、(n、m)はGCDを計算する)(主にコードを含むすべてのMおよびN

2〜10のソースコード:そこ

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(" "); 


      } 
     } 
+0

このコードを実行するとどうなりますか?結果はあなたが望むものとどう違うのですか? –

+1

[GCD、LCMの数字の検索方法](http://stackoverflow.com/questions/4201860/how-to-find-gcd-lcm-on-a-set-of-numbers)の可能な複製 – DimaSan

+0

あなたが与えたコードは、あなたが望むものとまったく同じように思えます。 1から10までのすべての対のGCDのGCDを計算します。問題は何ですか? –

答えて

0

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)); 
     } 
    } 
} 
関連する問題