我刚开始使用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]);
}
}
答案 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)
);
});
})