因此,我的问题是找到从1到20均分所有数字的最小倍数。我确实成功完成了任务,但是程序运行缓慢。这是代码,使用的最终编号为1亿。
可以想象,这需要很多时间。所以我想知道,我将如何优化此代码?
另外,很高兴知道如何更改应划分为的数字数量,因此用1到15代替1到20。
function smallestMultiple(n) {
for (i = 0; i< n; i++) {
if (i%1 === 0 && i%2 === 0 && i%3 === 0 && i%4 === 0 && i%5 === 0
&& i%6 === 0 && i%7 === 0 && i%8 === 0 && i%9 === 0
&& i%10 === 0 && i%11 === 0 && i%12 === 0 && i%13 === 0
&& i%14 === 0 && i%15 === 0 && i%16 === 0 && i%17 === 0
&& i%18 === 0 && i%19 === 0 && i%20 === 0 ) {
console.log(i);
}
};
};
现在,很明显,这花了5分钟以上才能找到答案。我想知道是否有一种更有效的方法?
编辑:显然我也可以使用1-20的变量。将对此进行调查,如果您有答案,请彻底解释您的答案以及为什么它更有效。
最佳答案
我想我直接从论坛上找到了最优雅的解决方案之一:
然后,我将其解释为Javascript并获得了此脚本
console.log("Please type in smallestMultiple(n), whereas n is the smallest multiple.");
function smallestMultiple(n) {
var result = 1;
var prev;
for (i=1; i<n+1; i++) {
prev = result;
while (result%i > 0) {
result += prev;
}
}
console.log(result);
};
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
编辑:在脚本中发现错误,该错误将返回
smallestNumber(11)
=2520。已在for
循环中修复:for(i = 0; i < n + 1 ; i ++)