【发布时间】:2018-08-29 17:09:48
【问题描述】:
我正在尝试编写一个函数,它应该计算所有素数直到输入参数并返回它。我这样做是为了练习。
我以几种方式编写了此函数,但我试图找到新的方法来执行此操作以进行更多练习并获得更好的性能。我最后尝试的是下面的代码:
function primes(num){
let s = []; // sieve
for(let i = 2; i <= num; i++){
s.push(i);
}
for(let i = 0; i < s.length; i++) {
for(let j = s[i]*s[i]; j <= num;) {
//console.log(j);
if(s.indexOf(j)!= -1){
s.splice(s.indexOf(j), 1, 0);
}
j+=s[i];
}
}
s = s.filter(a => a != 0);
return s;
}
console.log(primes(10));
问题是当我在浏览器中运行它时,它一直在计算并且不会停止,我不知道为什么。
注意:当我注释掉 splice 并取消注释 console.log(j); 时,一切都按预期工作,日志应该是它们应该有的东西,但是使用 splice,浏览器会继续计算并且不会停止。
我使用的是最新版本的 Chrome,但我认为这与问题无关。
【问题讨论】:
标签: javascript sieve-of-eratosthenes