打印0到100之间的素数

时间:2016-01-12 03:03:46

标签: javascript

我正在尝试打印0到100之间的所有素数,但在执行此代码时,浏览器的标签只输出任何内容!!

    for(var i = 2; i < 100; i++)
    {
        var prime = [];
        for(var j = 0; j <= i; j++)
        {
            var p = i % j;
        }
        if(p != 0) prime.push(i);
            else continue;
    }

    for(var k = 0; k < prime.length; k++)
    {
        document.writeln(prime[k], "<br>");
    }

5 个答案:

答案 0 :(得分:2)

因为你在每个循环周期中清空你的素数列表,所以将它移到for循环之外

答案 1 :(得分:2)

试试这个。我也优化了代码(你只需要检查到sqrt(i))。

 var prime = [];
 prime.push(2); //smallest prime
 var flag = 0; 
 for(var i = 3; i < 100; i=i+2)   //skip all even no
    {            
      for(var j = 3; j*j <= i; j=j+2)   //check by upto sqrt(i), skip all even no
        {                          
          if(i % j == 0) {
              flag = 0;break;       //not a prime, break
            }  
          flag = 1;      
        }
      if (flag == 1) prime.push(i);  //prime, add to answer
    }

    for(var k = 0; k < prime.length; k++)
    {
        document.writeln(prime[k], "<br>");
    }

答案 2 :(得分:0)

你需要在你的循环之外使你的变量素数

这是您重写的代码

var prime = [];
for(var i = 2; i < 100; i++)
{

    for(var j = 0; j <= i; j++)
    {
        var p = i % j;
    }
    if(p != 0) prime.push(i);
        else continue;
}

for(var k = 0; k < prime.length; k++)
{
    document.writeln(prime[k], "<br>");
}

答案 3 :(得分:0)

我是Eratosthenes筛子的粉丝。 以下代码应该做你想要的。

var prime = Array(101).fill(true);
for (var i = 2; i < 100; ++i){
  if (prime[i]){
    document.writeln(i, "<br>");
    for (var j = i*i; j < 100; j += i){
      prime[j] = false;
    }
  }
}

或者,因为它只能达到100,所以你可以手动输入列表(但是,如果你这样做的话,嘿,那就是学习的地方?)。

答案 4 :(得分:0)

(1)在for循环外移动prime,(2)在2开始j,j <1时结束。 i,(3)检查p == 0时是否带有布尔标志并打破内循环。

var prime = []; //put prime out here so it does not reassign
for(var i = 2; i < 100; i++)
{

    var isPrime = true; 
    for(var j = 2; j < i; j++) //start j at 2
    {
        var p = i % j;
        if(p == 0)
        {
            isPrime = false;
            break;
        }
    }
    if(isPrime) prime.push(i); 
}

for(var k = 0; k < prime.length; k++)
{
    document.writeln(prime[k], "<br>");
}