素数函数中打印错误的数字

时间:2018-10-14 08:54:54

标签: javascript

function primeSieve() {
  for(i = 0; i <= 100; i++){
  let flag = true
    for(let j = 2; j < i/2; j++){
      if(i % j === 0){
        flag = false
      }
    }
    if(flag){
      console.log(i)
    }
  }
}

primeSieve();

嗨,

我正在研究一些算法,遇到了一个主要的筛子问题。我正在尝试打印0到100之间的所有素数,并且大部分情况下都可以使用。但是,我意识到4以某种方式滑倒了,我不知道为什么要为我的生命而死。想知道我是否能看到几双眼睛,看看4最终如何登录到控制台,为什么会这样?

谢谢!

2 个答案:

答案 0 :(得分:2)

内部循环中的条件:

    <?php
$A=ord("H"); 
echo($A);   
?>

for (let j = 2; j < i / 2; j++) {

这意味着,当j < i / 2 为4时,一旦i到达j(或者,由于2总是在第一次迭代之前被初始化为2),则循环中断。因此,没有任何迭代,j中的i4就没有任何机会。

更改为

flag = false

此外,每个维基百科:

  

素数(或素数)是大于1的自然数,不能通过将两个较小的自然数相乘而形成。

因此,您应该将for (let j = 2; j <= i / 2; j++) { 从2而不是0开始。

此外,就像您的i一样,最好用let j声明i,以免隐式污染全局范围:

let

答案 1 :(得分:0)

除了包含要用j检查的j <= i / 2的值之外,还可以省略标志的使用,而将continue与带有标签的外部循环一起使用。

function primeSieve() {
    outer: for (var i = 2; i <= 100; i++) {
        for (var j = 2; j <= i / 2; j++) {
            if (i % j === 0) {
                continue outer;
            }
        }
        console.log(i);
    }
}

primeSieve();