我正在用j / s写一个素数检查器,我想知道为什么当我测试55时我为什么会得到回报...它似乎适用于所有其他情况我检查的不是55,有人可以告诉我哪里出错了吗?
var isPrime = function(num){
if (num === 2){
return true;
}
else if(num%2 === 0){
return false;
}
else{
var i = 2;
while(i<num){
if((num/i) % i === 0 ){
return false;
}
i++
}
return true;
}
};
提前感谢并为noobness道歉!
答案 0 :(得分:2)
if((num/i) % i === 0 ){
return false;
}
这是什么情况? 不应该
if(num % i === 0 ){
return false;
}
答案 1 :(得分:1)
就像@Andrey指出的那样,if
循环中的while
语句不正确。对于i=5
处的55,你应该得到55为素数的假,但是55/5 % 5 == 1
此外,你可以仅使用==
而不是===
来获得逻辑等号,因为===
检查值和类型是否相等,这在此是不必要的。
答案 2 :(得分:0)
试试这个。
var isPrime = function isPrime(value) {
var i = 2;
for(i; i < value; i++) {
if(value % i === 0) {
return false;
}
}
return value > 1;
};
答案 3 :(得分:0)
即使您的错误可能已经解决,我也建议您考虑其他一些方面来优化您的代码:
您不必检查最多n-1的所有除数。显然你可以在n / 2处停止检查,但是甚至有更严格的界限证明这意味着你可以在√n时停止检查我是否正确。为了进一步优化,你不必检查甚至除数> 2。
else {
var i = 3;
while ( i < num/2 ) {
if( num % i == 0 ) {
return false;
}
i+=2;
}
return true;
}
有关素数测试的详细信息,请参阅https://en.wikipedia.org/wiki/Primality_test。
P.S:我刚刚在文本框中编写了代码,但看起来它可能有效。