使用Eratosthenes筛子检查列表中的质数

时间:2015-02-02 20:52:31

标签: javascript algorithm data-structures

我有一个数组作为输入,我想打印该列表中存在的素数。我能够使用trial division method来做到这一点。但是,在尝试使用Eratosthenes method的筛子做同样的事情时,我感到震惊。

我尝试使用下面的代码,但对如何将最终结果数组与输入数组列表进行比较并仅返回与输入列表匹配的值感到困惑。 (详细的答案将有用,因为我是javascript的初学者)。

var arr=[4,7,10,12,13,19,22,37];
function checkPrime(arr)
{
  var output=[],primes=[];
  var x=arr.length;
  for(i=2;i<=arr[x-1];i++)
    primes[i]=1;

  for(i=2;i<=arr[x-1];i++)
    for(j=2;j<=Math.sqrt(arr[x-1]);j++)
      primes[i*j]=0;


  for(i=0;i<=arr[x-1];i++){
    if(primes[i]==1){
      output.push(i);
     }
    }



  return output;
}

console.log(checkPrime(arr));

1 个答案:

答案 0 :(得分:2)

创建输出列表时,您希望与arr中的值进行比较,而不是索引,因此您需要将primes[i]替换为primes[arr[i]]

所以这个:

if (primes[i] == 1) {
  output.push(i);
}

成为这个:

if (primes[arr[i]] == 1) {
  output.push(arr[i]);
}