使用 javascript 测试质数
Test for prime number with javascript
我真的很想知道为什么这段代码不起作用。有人能告诉我为什么 {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);
如T.J.Crowder所述,i
未声明;但是,我认为这不是您唯一的问题。您正在使用一小部分素数作为查找所有素数的基础。这行不通。一些不能被 {2, 3, 5, 7} 整除但仍不是质数的数字示例包括:
121 = 11 * 11
169 = 13 * 13
...
更准确的方法是使用所谓的 Sieve of Eratosthenes。还有其他方法,但它们的复杂性要差得多。
埃拉托色尼筛法的一种变体称为欧拉筛法(或欧拉筛法)。走几条捷径,减少计算量,效率稍微高一点。
我真的很想知道为什么这段代码不起作用。有人能告诉我为什么 {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);
如T.J.Crowder所述,i
未声明;但是,我认为这不是您唯一的问题。您正在使用一小部分素数作为查找所有素数的基础。这行不通。一些不能被 {2, 3, 5, 7} 整除但仍不是质数的数字示例包括:
121 = 11 * 11
169 = 13 * 13
...
更准确的方法是使用所谓的 Sieve of Eratosthenes。还有其他方法,但它们的复杂性要差得多。
埃拉托色尼筛法的一种变体称为欧拉筛法(或欧拉筛法)。走几条捷径,减少计算量,效率稍微高一点。