我必须将数组中的所有索引都设置为等于1。然后,我必须找出哪些索引不是素数并将其设置为0。然后打印出数组中所有等于1(prime)的索引。

如果索引不是素数,我将无法将索引设置为0。我现在的输出是,它只打印2-100之间的每个数字。您能帮我弄清楚确定索引是否为素数的条件吗?

<script>
var primeArray = new Array();
for(var i = 0; i < 101; i++){

    primeArray[i] = 1;
    //document.writeln(" " +  primeArray[i]);

}

primeArray[0] = 0;
primeArray[1] = 0;
//document.writeln("" +primeArray[0]);
//document.writeln("" +primeArray[1]);


for(var j = 2; j < 101; j++){

    if(primeArray[j] == 1){

        for(var k=j+1; k<101; k++){
            //var test = j%k;
            //document.writeln("" + test);
            if(j%k == 0){
                primeArray[j]=0;
            }
        }
    }
    //if(primeArray[j] == 1){
    //document.writeln("" + primeArray);
    //}
}
document.writeln("" + primeArray)
</script>

最佳答案

您的循环测试j%k == 0,但k始终大于j,因为您的k循环从j + 1开始并不断增大,因此j%k将始终等于j。

我认为你的循环应该是

for(var k=j-1; k>1; k--)
{
    if(j%k == 0)
    {
      primeArray[j]=0;
      break; // it's not prime, so move on to the next value for j.
    }
}


这不是最佳的查找代码,但是它将获得正确的结果。

10-04 19:47