【发布时间】:2013-04-18 04:00:44
【问题描述】:
我试图找到第 10,001 个素数。我看过其他人写的代码,但我不太明白它的含义。我用 JavaScript 编写了一些代码,在其中我尝试使用 Eratosthenes 筛。我不确定问题是什么。看起来它应该可以正常工作,但我得到了错误的答案。
var compute = function() {
var prime = [2,3,5,7,11,13,17,19];
for(var i=20; i<=80000;i++) {
if(i%2!==0 && i%3!==0 && i%5!==0 && i%7!==0 && i%11!==0 && i%13!==0 && i%17!==0 && i%19!==0) {
prime.push(i);
}
}
console.log(prime[10000]);
};
compute();
【问题讨论】:
-
31*37=1147,所以 1147 不是素数,但您的条件会识别它为素数。
-
这可以通过只检查以 1 3 7 或 9 结尾的数字而不是加一来优化。
-
@TheWeirdNerd 你会怎么做呢?
-
从 1 开始 i 并在一个循环中递增。 2, 4, 2, 2... 一世。 e. i = 1 + 2 = 3 + 4 = 7 + 2 = 9 + 2 = 11...重复递增循环。当然,您必须修改循环的方式,但这会节省大量时间,尤其是当您到达那里并且必须进行大量计算以确认特定数字时。
标签: javascript arrays primes