我想找到第10,001个素数。我看过人们写过的其他代码,但我真的不明白这意味着什么。我在JavaScript中编写了一些代码,其中我尝试使用Sieve Of 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();
答案 0 :(得分:3)
这是一个简单的方法,但要找到百万分之
(甚至在某些机器中甚至十万分之一)
你需要超时斩断,
或将其发送给网络工作者以防止锁定。
你只需要在收集时检查主要除数,
因为每个数字都是素数的乘积
或者本身就是素数。
function nthPrime(nth){
var P= [2], n= 3, div, i, limit,isPrime;
while(P.length<nth){
div= 3, i= 1;
limit= Math.sqrt(n)+1;
isPrime= true;
while(div<limit){
if(n%div=== 0){
isPrime= false;
div= limit;
}
else div= P[i++] || div+ 2;
}
if(isPrime) P.push(n);
n+= 2;
}
return P[P.length-1];
}
<强>警报(nthPrime(10001)); 强>
答案 1 :(得分:2)
你的代码没有实现Eratosthenes的筛子。您必须实施以下步骤(来源:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes):
如果要查找第10001个素数,则必须选择n足够大,以便结果数组包含至少10001个元素,然后选择10001st元素作为结果。