我正在尝试打印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>");
}
答案 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>");
}