javascript 中的质因数,为什么这种情况不起作用?
Prime factor in javascript, why is this case not working?
我正在 j/s 中编写一个素数检查器,我想知道为什么当我测试 55 时我的 return 是真的...它似乎工作正常我检查的所有其他情况都不是 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;
}
};
在此先感谢并为菜鸟道歉!
if((num/i) % i === 0 ){
return false;
}
这是什么情况?
不应该
if(num % i === 0 ){
return false;
}
正如@Andrey 指出的那样,您在 while
循环中的 if
语句不正确。对于 i=5
处的 55 你应该得到 false 因为 55 是素数,但是 55/5 % 5 == 1
你也可以只使用 ==
而不是 ===
来表示逻辑相等,因为 ===
检查值和类型是否相等,这里不需要。
试试这个。
var isPrime = function isPrime(value) {
var i = 2;
for(i; i < value; i++) {
if(value % i === 0) {
return false;
}
}
return value > 1;
};
即使您的错误可能已解决,我还是建议考虑其他方面来优化您的代码:
- 澄清你的极端情况:一开始,检查 n<2 -> return false。至少在数学理论中,素数被定义为大于 1 的自然数,因此根据定义,1 不是像所有负数那样的素数。您的代码无法正确处理负数。
您不必检查直到 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: 我刚刚在文本框中写了这里的代码,但看起来它可能有效。
我正在 j/s 中编写一个素数检查器,我想知道为什么当我测试 55 时我的 return 是真的...它似乎工作正常我检查的所有其他情况都不是 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;
}
};
在此先感谢并为菜鸟道歉!
if((num/i) % i === 0 ){
return false;
}
这是什么情况? 不应该
if(num % i === 0 ){
return false;
}
正如@Andrey 指出的那样,您在 while
循环中的 if
语句不正确。对于 i=5
处的 55 你应该得到 false 因为 55 是素数,但是 55/5 % 5 == 1
你也可以只使用 ==
而不是 ===
来表示逻辑相等,因为 ===
检查值和类型是否相等,这里不需要。
试试这个。
var isPrime = function isPrime(value) {
var i = 2;
for(i; i < value; i++) {
if(value % i === 0) {
return false;
}
}
return value > 1;
};
即使您的错误可能已解决,我还是建议考虑其他方面来优化您的代码:
- 澄清你的极端情况:一开始,检查 n<2 -> return false。至少在数学理论中,素数被定义为大于 1 的自然数,因此根据定义,1 不是像所有负数那样的素数。您的代码无法正确处理负数。
您不必检查直到 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: 我刚刚在文本框中写了这里的代码,但看起来它可能有效。