javascript - 当我尝试获取公约数 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
,这是正确的,但功能是 testing 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 的更有效方法
推荐阅读
- python - 如何根据熊猫中的关系列将id收集到列表中
- javascript - 如何以编程方式“订阅”/接收 Web 推送通知(例如 python 或 nodejs)?
- css - 如何添加媒体查询以使图像的填充更小?
- android - smoothScrollToPosition 在嵌套的 RecyclerView 中不起作用
- laravel - 从 google drive 读取 word 文档内容
- asp.net-mvc - 使用 .Net 中的 SMTP 客户端以 .msg 格式保存电子邮件
- google-cloud-platform - 工作流失败。原因:刷新凭据时出现问题
- c# - 写入输出消息(C# => TextBox)
- objective-c - 如何在 Objective-C 中访问 Settings.bundle 中的本地化字符串?
- curl - 网页抓取 - 菜鸟