首页 > 解决方案 > 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 和其余素数的情况合并的最聪明的方法是什么?

提前感谢,如果这太基本了,我很抱歉,我在其他任何地方都找不到正确的答案。

标签: javascript

解决方案


在完成检查所有数字之前,您正在放置“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));


推荐阅读