因此,我的问题是找到从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 ++)

10-04 19:31