Javascript最小的多个保持崩溃

时间:2015-05-27 20:57:24

标签: javascript html algorithm

我目前正在通过项目euler试图在javascript上做得更好。我陷入了一个似乎无法弄清楚的问题。

问题是:

2520是可以除以1至10中的每个数字而没有任何余数的最小数字。可以被1到20的所有数字整除的最小正数是多少?

所以当我遇到困难时,我搜索了堆栈并发现了一些类似的主题,但每个人的代码似乎都比我想象的要复杂一些。我的问题是我能够创建正确的程序,以找到1-10的最小倍数,我能够得到2520。

但是,当我调整我的程序以使用数字1-20时,它会崩溃。我可以得到1-19,但一旦我做了20,我会继续崩溃。这是我的代码。如果您将其更改为 int[] temp={}; count != 10,则可以获得答案2520但是20似乎不起作用。任何帮助,将不胜感激。

i <= 10

2 个答案:

答案 0 :(得分:1)

它不会崩溃,只需要很长时间,因为你的脚本效率低下。

<script>
    var num = 0;
    var count = 0;
    var numbers=20;

    while (count != numbers) {
        num+=numbers;
        count = 0;

        for (var i = 1; i <= numbers; i++) {
            if (num % i == 0) {
                count++;
            }
            else {break;}
        }
    }

    console.log(num);
    console.log(count);
</script>

答案 1 :(得分:0)

是的,没有打破,只是花了很长时间。这应该是一种更有效的方法:

mconcat

结果:

var num = 1;
var isDivisible = false;
var startTime = (new Date().getTime());

while (!isDivisible) {
    for (var i = 20; i > 1; i--) {
        if (num % i !== 0) {
            isDivisible = false;
            num = num + (i + 1);
            break;
        }
        else {
            isDivisible = true;
        }
    } 
}

console.log(num);
console.log("Finished in " + (((new Date().getTime()) - startTime) / 1000) + " seconds");

注意:以上来自JSFiddle的结果。 。 。在Firebug中以26.57秒结束。 :)