用javascript测试素数

时间:2018-06-13 12:06:52

标签: javascript discrete-mathematics

我真的想知道为什么这段代码不起作用。有人可以告诉我为什么{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);

1 个答案:

答案 0 :(得分:4)

正如T.J.Crowder所说,i未被宣布;但是,我不认为这是你唯一的问题。您使用一小部分素数作为查找所有素数的基础。这不会奏效。一些不能被{2,3,5,7}除以但仍然不是素数的数字的例子包括:

121 = 11 * 11
169 = 13 * 13
...

更准确的方法是使用所谓的Sieve of Eratosthenes。还有其他方法,但它们的复杂性要差得多。

Eratosthenes筛子的变体称为Euler's Sieve(或欧拉筛)。通过采用几个快捷方式并减少计算次数,效率会略高一些。