javascript - checkPrime 函数返回不正确的值
问题描述
numbers = [];
for (x = 1; x <= 1e4; x++) {
numbers.push(x)
}
//console.log(numbers)
function checkPrime(num) {
if (num == 1 || num == 0) {
return 'It is a separate case'
}
if (num == 2) {
return num + ' is prime'
}
for (var i = 2; i < num; i++) {
if (num in numbers) {
if (num % i === 0) return num + ' is not prime';
else {
return num + ' is prime';
}
return num !== 1;
} else {
return num + ' is not in range';
}
}
}
console.log(checkPrime(27));
你好。在上面的代码中,我尝试创建一个函数,该函数返回有关数字是否为素数的信息。
但是,在某些情况下它会失败。像例如。在 27 或 145 的情况下,它返回的值是素数,这显然是错误的。我怎样才能修改这个程序以使其工作?
另外,将数字 2 和其余素数的情况合并的最聪明的方法是什么?
提前感谢,如果这太基本了,我很抱歉,我在其他任何地方都找不到正确的答案。
解决方案
在完成检查所有数字之前,您正在放置“else”子句,该子句表明该数字是素数,直到其自身为-1。
为了达到最佳效果,您不需要循环直到数字(< num)。直到数字的平方根。(甚至比循环直到 num/2 更好)例如:当循环达到 13 时,可以看到 167 是素数。13*13 = 169 > 167 所以你可以停止并安全地确认 167 是素数。
对于数字 2,有一个单独的案例是正确的。
下面是检查单个值是否为素数的代码:
function checkPrime(num) {
if (num == 1 || num === 0) {
return 'It is a separate case'
}
if (num == 2) {
return num + ' is prime'
}
for (var i = 2; i < Math.sqrt(num); i++) {
if (num % i === 0) return num + ' is not prime';
}
return num + ' is prime';
}
alert(checkPrime(27));