Javascript素数函数控制台问题



如果在某个地方对此进行了报道,我们深表歉意。我在这里搜索了很多素数函数的答案,但似乎找不到问题的答案。我拼凑了一个函数来检查一个数字是否为素数,然后我对100以下的数字运行for循环,并打印出素数。我的代码不打印素数。它似乎开始打印素数,但随后在那里投了一个9,然后情况变得更糟。

我发现了与我的代码似乎完全相同的代码,它成功地将素数打印到了控制台上。下面是我的代码;我的错误在哪里?为了记录在案,我正在使用jsfiddle,而且我在这方面很新。

function isPrime(number) {
  if (number < 2) {
    return false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      return false;
    } else {
      return true;
      }
  }
};
for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}

一旦number不能被i整除,就返回true。将您的return true移到最后:

function isPrime(number) {
    if (number < 2) return false;
    for (var i = 2; i < number; i++) { 
        if (number % i == 0) return false;
    }
    return true;
}

您只想在没有找到划分numberi时返回true。

function isPrime(number) {
  var result = true;
  if (number < 2) {
    result = false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      result = false;
    }
  }
  return result;
};
for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}

您的问题在中

if (number % i == 0) { 
  return false;
} else {
  return true;
}

当你在每种情况下(真或假)都返回一些东西时,你的算法在每个第一个周期都会退出。

您不应在else语句中返回任何内容:

if (number % i == 0) { 
  return false;
} else {
  // continue the for statement.
}

并使函数在的之后返回true。

开玩笑的是,一个更快的算法:

function isPrime(number) {
    var primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
    if (primes.indexOf(number) > -1) {
        return true;
    } else {
        return false;
    }
};
function isPrime(number) {
var check=true;
  if (number < 2) {
    return false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      check=false;
    } 
  }
   return check;
};
for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}

最新更新