计算数组中元素的GCD;的JavaScript

时间:2017-01-31 18:14:20

标签: javascript arrays for-loop

我刚开始使用JS,需要一些计算gcd的帮助。 我想计算两个数组中两个元素的每个组合的gcd。

我的意思是:对于数组A中的每个元素A[i],对于来自B的每个元素B[j],计算A[i]B[j]的gcd值并将其打印在安慰。我有16张照片,但它们不正确。我使用Euclid的算法来计算它,看起来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]);
  }
}

2 个答案:

答案 0 :(得分:1)

您在执行euclid算法时修改数组元素。我建议为此算法创建一个单独的函数,例如:

foo

修改 您可以通过以下方式制作和使用存储阵列:

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;
}

答案 1 :(得分:1)

如果不对您的算法进行复杂化,请使用forEach,如下所示:

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)
     );
   });

})