【问题标题】:JavaScript Find Prime NumbersJavaScript 查找素数
【发布时间】:2015-03-03 22:25:23
【问题描述】:

我必须将数组中的所有索引都设置为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>

【问题讨论】:

  • 哪些数字不是质数?嗯,是一个或多个素数的数的倍数。所以可以从 2 开始,把 2 的所有倍数设置为 0。然后检查 2 之后的下一个单元格。是1吗?是的,因为 3 不是 2 的倍数。所以现在将 3 的所有倍数设置为 0。重复直到你通过整个数组。

标签: javascript primes


【解决方案1】:

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

  1. 创建所需大小(最大素数)的数组,并将其初始化为某个值(在您的情况下,全部为1)。
  2. 将“试验”值初始化为 2。
  3. 检查索引为试验值的数组元素。如果元素值为 1,则试验值为素数。从添加到自身的试验值开始,遍历数组,将试验值的倍数设置为 0。(如果试验条目为零,则不是素数,不需要更多工作。)
  4. 增加试验值并继续第 3 步,当试验值超过数组长度时停止。

当迭代完成时,数组中包含 1 的条目是素数。

请注意,使用这种技术,不需要乘法或除法;只是添加。

【讨论】:

    【解决方案2】:

    您的循环测试 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.
        }   
    }
    

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

    【讨论】:

    • 我用你的 for 循环替换了“break”。它工作完美。谢谢尼尔!
    【解决方案3】:

    我会给出一个函数,你会调用它来知道给定的数字是否是素数。要对其进行测试,请创建一个文本文件,将其重命名为 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>
    

    保存并双击 prime.html。输入不同的数字。

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

    最后在循环中调用is_prime,如果返回false,则设置数组位置为0。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 2017-05-23
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多