使用Eratosthenes筛子查找素数JavaScript

我们需要编写一个带数字(例如n)的JavaScript函数。

该函数应返回一个介于1和n之间的所有素数的数组。

方法

第一步是创建一个与给定数字一样大的数组,并将其所有值初始化为true。数组索引将代表所有可能的质数,并且开头都为真。

然后,我们创建一个for循环,该循环从2迭代到给定数字的平方根。根据定义,任何整数的乘积都不能是素数,而0和1会被忽略,因为它们的可除性不会影响素数。

最后,我们可以简单地过滤掉所有错误值以得出所有素数。

示例

const num = 100;
const findPrimes = (num = 10) => {
   const numArr = new Array(num + 1);
   numArr.fill(true);
   numArr[0] = numArr[1] = false;
   for (let i = 2; i <= Math.sqrt(num); i++) {
      for (let j = 2; i * j <= num; j++){
          numArr[i * j] = false;
      }
   }
   return numArr.reduce((acc, val, ind) => {
      if(val){
         return acc.concat(ind);
      }else{
         return acc;
      };
   },[]);
};
console.log(findPrimes(num));

输出结果

控制台中的输出将是-

[
   2, 3, 5, 7, 11, 13, 17, 19,
   23, 29, 31, 37, 41, 43, 47, 53,
   59, 61, 67, 71, 73, 79, 83, 89,
   97
]