JavaScript查找素数

JavaScript查找素数,javascript,primes,Javascript,Primes,我必须将数组中的所有索引设置为1。然后我必须找出哪些索引不是素数,并将它们设置为0。然后打印出数组中所有等于1(素数)的索引 如果不是素数,我无法得到将索引设置为0的部分。我现在的输出是它只打印2-100之间的每个数字。你能帮我找出决定索引是否为素数的条件吗 <script> var primeArray = new Array(); for(var i = 0; i < 101; i++){ primeArray[i] = 1; //document.wri

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

如果不是素数,我无法得到将索引设置为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>

var primeArray=新数组();
对于(变量i=0;i<101;i++){
素数数组[i]=1;
//document.writeln(“+primerarray[i]);
}
素数数组[0]=0;
primeArray[1]=0;
//document.writeln(“+primerarray[0]);
//document.writeln(“+primerarray[1]);
对于(var j=2;j<101;j++){
if(primeArray[j]==1){

对于(var k=j+1;k您的循环测试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.
    }   
}

这不是最佳素数查找代码,但它会得到正确的结果。

您被分配的是一种查找可追溯到古希腊的素数的方法。这是一个简单、直接的过程

  • 创建一个所需大小(最大素数)的数组,并将其初始化为某个值(在您的示例中为all
    1
  • 将“试用”值初始化为2
  • 检查索引为试用值的数组元素。如果元素值为1,则试用值为素数。从添加到自身的试用值开始,通过数组将试用值的倍数设置为0进行迭代。(如果试用项为零,则它不是素数,无需进行更多工作。)
  • 增加试用值并继续执行步骤3,当试用值超过数组长度时停止
  • 当迭代完成时,数组中包含1的条目是素数


    请注意,使用此技术,不需要乘法或除法,只需加法。

    我将提供一个函数,您将调用该函数以了解给定的数字是否为素数。要测试它,请创建一个文本文件,将其重命名为prime.html(例如),然后粘贴下一个代码:

    <html>
      <head>
        <title>Prime</title>
        <script type="text/javascript">
    
    var X = new Array( 1,2,3,4,5,6,7,8,9 );
    
    function arr () {
    var i;
    for ( i = 0; i < X.length; i++ )
      if ( is_prime( X[ i ] ) )
           alert( X[ i ] + " -> set to 1" );
      else alert( X[ i ] + " -> set to 0" );
    }
    
    function check_prime () {
    var num = document.getElementById( "txt" ).value;
    if ( is_prime( parseInt( num ) ) )
         alert( "Is prime" );
    else alert( "Is NOT prime" );
    }
    
    function is_prime ( num ) {
    var i;
    for ( i = 2; i < num; i++ )
      if ( ( num % i ) == 0 )
         return false;
    return true;
    }
        </script>
      </head>
      <body>
        Enter a number
        <input type="text" id="txt" />
        <br/>
        <button onclick="check_prime()">Check if prime</button>
        <br/>
        <button onclick="arr()">Check array</button>
      </body>
    </html>
    
    
    首要的
    var X=新数组(1,2,3,4,5,6,7,8,9);
    函数arr(){
    var i;
    对于(i=0;i设置为1”);
    else警报(X[i]+“->设置为0”);
    }
    函数检查_素数(){
    var num=document.getElementById(“txt”).value;
    if(是_素数(parseInt(num)))
    警惕(“是首要的”);
    else警报(“非主要”);
    }
    函数为素数(num){
    var i;
    对于(i=2;i
    检查是否为素数
    
    校验数组
    保存并双击prime.html。输入不同的数字

    现在我们知道它可以工作了,您将只复制函数is_prime,并将其粘贴到代码中,然后在遍历和检查数组的循环中调用它

    最后,调用是循环中的_prime,如果返回false,则将数组位置设置为0


    我用按钮检查数组做了一个例子。测试它。

    什么数字不是素数?好的,是一个或多个素数的倍数。所以你可以从2开始,将所有的倍数都设置为2到0。然后检查两个之后的下一个单元格。是1吗?是的,因为3不是2的倍数。所以现在把所有的倍数都设置为3到0。重复a直到你完成了整个阵列。我用你的for循环替换了我的for循环,除了“break”。它工作得很好。谢谢Neil!