我目前正在通过项目euler试图在javascript上做得更好。我陷入了一个似乎无法弄清楚的问题。
问题是:
2520是可以除以1至10中的每个数字而没有任何余数的最小数字。可以被1到20的所有数字整除的最小正数是多少?
所以当我遇到困难时,我搜索了堆栈并发现了一些类似的主题,但每个人的代码似乎都比我想象的要复杂一些。我的问题是我能够创建正确的程序,以找到1-10的最小倍数,我能够得到2520。
但是,当我调整我的程序以使用数字1-20时,它会崩溃。我可以得到1-19,但一旦我做了20,我会继续崩溃。这是我的代码。如果您将其更改为 int[] temp={};
和count != 10
,则可以获得答案2520但是20似乎不起作用。任何帮助,将不胜感激。
i <= 10
答案 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秒结束。 :)