可能是一个关于 isPrime 函数的愚蠢问题

Probably a silly question regarding an isPrime function

出于某种原因,我的 isPrime 函数不适用于 3 的倍数。

console.log(isPrime(9))returns我true,当数明显不是素数。我已经盯着逻辑看了一段时间,多次 google 搜索没有结果,所以我假设这是一些非常愚蠢的疏忽。我可能可以复制并粘贴以使其工作,但我正在尝试建立正确的理解。

function isPrime(num){
  for (let i = 2; i < Math.sqrt(num); i++){
    if (num % i == 0){
      return false;
    }
    return true;
  }
}

console.log(isPrime(9)); 

而不是 Math.sqrt 你应该写 num.

  1. i <需要替换为i <=
  2. 我添加了一个变量来存储 Math.sqrt 调用,因为每次迭代都是一项昂贵的操作。
  3. 您的第一次迭代 returns truefalse 立即。您应该从 for 循环中完全删除 return true 以让它迭代。

function isPrime(num){
  let max = Math.sqrt(num);
  for (let i = 2; i <= max; i++){
    if (num % i == 0){
      return false;
    }
  }
  return true;
}

console.log(isPrime(1));
console.log(isPrime(2));
console.log(isPrime(3));
console.log(isPrime(4));
console.log(isPrime(5));
console.log(isPrime(7));
console.log(isPrime(8));
console.log(isPrime(9));
console.log(isPrime(10));