繁体   English   中英

JavaScript查找素数

[英]JavaScript Find Prime Numbers

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

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

  1. 创建所需大小(最大质数)的数组,并将其初始化为某个值(在您的情况下为全1 )。
  2. 将“试用”值初始化为2。
  3. 检查索引为试验值的数组元素。 如果元素值为1,则试验值为素数。 从添加到其自身的试验值开始,循环遍历将试验值的倍数设置为0的数组。(如果试验条目为零,则它不是素数,因此无需进行其他工作。)
  4. 增加试验值并继续执行步骤3,当试验值超出数组长度时停止。

迭代完成后,包含1的数组中的条目为质数。

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

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

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

我将提供一个函数,供您调用以了解给定数字是否为质数。 要对其进行测试,请创建一个文本文件,将其重命名为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。

我用按钮Check array做了一个例子。 测试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM