我真的想知道为什么这段代码不起作用。有人可以告诉我为什么{2,3,5,7}不能用作测试素数的基础。下面的代码试图总结低于200万的所有素数
var x = 2 + 3 + 5 + 7;
for(i = 2; i<2000000; i++){
if(Number.isInteger(i/2) || Number.isInteger(i/3) || Number.isInteger(i/5) || Number.isInteger(i/7)){
}else{
x = x + (i);
}
}
console.log(x);
答案 0 :(得分:4)
正如T.J.Crowder所说,i
未被宣布;但是,我不认为这是你唯一的问题。您使用一小部分素数作为查找所有素数的基础。这不会奏效。一些不能被{2,3,5,7}除以但仍然不是素数的数字的例子包括:
121 = 11 * 11
169 = 13 * 13
...
更准确的方法是使用所谓的Sieve of Eratosthenes。还有其他方法,但它们的复杂性要差得多。
Eratosthenes筛子的变体称为Euler's Sieve(或欧拉筛)。通过采用几个快捷方式并减少计算次数,效率会略高一些。