2017-01-31 3 views
0

私はJSで始まったばかりで、gcdを計算するのに助けが必要です。 2つの配列の2つの要素のすべての組み合わせについて、gcdを計算したいと思います。配列内の要素のGCDを計算する。 JavaScript

Iの意味:配列Aの各要素A[i]ため、Bの各要素B[j]ため、A[i]B[j]のGCD値を計算し、コンソールでそれを印刷します。私には16枚のプリントがありますが、それらは正しくありません。私はそれを計算するためにユークリッドのアルゴリズムを使用し、A[i]の値が上書きされているように見えます。なぜ私は考えていない。誰か助けてくれますか?これは私のコードです:

var n = 4; 
 
var A = [2, 5, 6, 7]; 
 
var B = [4, 9, 10, 12]; 
 
for (var i = 0; i < n; i++) { 
 
    for (var j = 0; j < n; j++) { 
 
    while (A[i] != B[j]) { 
 
     if (A[i] < B[j]) { 
 
     B[j] = B[j] - A[i]; 
 
     } else { 
 
     A[i] = A[i] - B[j]; 
 
     } 
 
    } 
 
    console.log(A[i]); 
 
    } 
 
}

+1

'const gcd =(a、b)=>(!b)? a:gcd(b、a%b) 'は事を複雑にしません –

答えて

1

ユークリッドのアルゴリズムを実行しながら、あなたの配列要素を変更しています。私は次のように、このアルゴリズムのために別の関数を作成することをお勧め:

var n = 4; 
var A = [2, 5, 6, 7]; 
var B = [4, 9, 10, 12]; 

for (var i = 0; i < n; i++) { 
    for (var j = 0; j < n; j++) { 
     console.log(euclid(A[i], B[j])); 
    } 
} 

function euclid(a, b) { 
    while (b != 0) { 
     var r = a % b; 
     a = b; 
     b = r; 
    } 
    return a; 
} 

編集: はあなたが作ると次のようにストレージアレイを使用することができます:あなたのアルゴリズム、使用をcomplicationgせずに

var C = []; // The array that will contain the arrays 

for (var i = 0; i < n; i++) { 
    C[i] = []; // "Inner array" 
    for (var j = 0; j < n; j++) { 
     C[i][j] = euclid(A[i], B[j]); 
     console.log(C[i][j]); 
    } 
} 
+0

非常に多くのありがとう! 4つの1x4アレイを作成することについて、私は興味がありますか? – donchuan

+0

1つの4x4アレイを作成しますか? –

+0

いいえ、いいえ、それは完璧です!私はちょっとあなたの提案を修正し、私が望むものを正確に得ました: – donchuan

1

const A = [2, 5, 6, 7]; 
 
const B = [4, 9, 10, 12]; 
 

 
const gcd = (x, y) => (!y) ? x : gcd(y, (x % y)); 
 

 
A.forEach((a, i) => { 
 
    
 
    B.forEach((b, j) => { 
 
    console.log(
 
     `GCD(A[${i}]=${a}, B[${j}]=${b}) =`, gcd(a, b) 
 
    ); 
 
    }); 
 

 
})
:次のように

関連する問題