当我尝试获取公约数 JavaScript 时出现无限循环问题
infinite loop issue when I try to get the common divisor JavaScript
我正在尝试获取一些数字的最接近公约数,但由于某种原因,代码进入了无限循环,我不知道为什么。例如,假设我有数字 2、3 和 4。在这种情况下,最接近的公约数是 12(12 % 2 = 0、12 % 3 = 0、12 % 4 = 0)。这是我的代码:
function sumFracts(l) {
let isDivis = false;
let divisor = 1;
while (!isDivis) {
divisor++;
isDivis = true;
l.map((v, i) => {
v % divisor !== 0 ? isDivis = false : isDivis;
});
}
return divisor
}
其中 l = [2, 3, 4] ;
请解释一下我做错了什么。
12
是 2, 3, 4
的最小公倍数,不是除数。
你的模数倒了。在您的文本中显示 12 % 2 == 0
,这是正确的,但函数正在测试 2 % 12 !== 0
.
您也可以使用 every()
方法代替 map()
。
function lcm(l) {
let product = l.reduce((acc, cur) => acc * cur, 1);
for (let multiple = 1; multiple <= product; multiple++) {
if (l.every(v => multiple % v == 0)) {
return multiple;
}
}
}
console.log(lcm([2, 3, 4]));
console.log(lcm([5, 7, 11, 13]));
您可以在Wikipedia
中找到更有效的LCM计算方法
function sumFracts(l) {
let isDivis = false;
let divisor = 1;
while (isDivis===false) {
divisor++;
isDivis = l.every(el=>((divisor % el) == 0));
}
return divisor
}
console.log(sumFracts([2, 3, 4]))
我正在尝试获取一些数字的最接近公约数,但由于某种原因,代码进入了无限循环,我不知道为什么。例如,假设我有数字 2、3 和 4。在这种情况下,最接近的公约数是 12(12 % 2 = 0、12 % 3 = 0、12 % 4 = 0)。这是我的代码:
function sumFracts(l) {
let isDivis = false;
let divisor = 1;
while (!isDivis) {
divisor++;
isDivis = true;
l.map((v, i) => {
v % divisor !== 0 ? isDivis = false : isDivis;
});
}
return divisor
}
其中 l = [2, 3, 4] ;
请解释一下我做错了什么。
12
是 2, 3, 4
的最小公倍数,不是除数。
你的模数倒了。在您的文本中显示 12 % 2 == 0
,这是正确的,但函数正在测试 2 % 12 !== 0
.
您也可以使用 every()
方法代替 map()
。
function lcm(l) {
let product = l.reduce((acc, cur) => acc * cur, 1);
for (let multiple = 1; multiple <= product; multiple++) {
if (l.every(v => multiple % v == 0)) {
return multiple;
}
}
}
console.log(lcm([2, 3, 4]));
console.log(lcm([5, 7, 11, 13]));
您可以在Wikipedia
中找到更有效的LCM计算方法function sumFracts(l) {
let isDivis = false;
let divisor = 1;
while (isDivis===false) {
divisor++;
isDivis = l.every(el=>((divisor % el) == 0));
}
return divisor
}
console.log(sumFracts([2, 3, 4]))