首页 > 解决方案 > 是否可以在不使用 for 循环的情况下找到素数?可以仅使用过滤器方法完成吗?

问题描述

在给定的输入 x 数组中,你能找到所有小于 x 的素数吗?这可以通过 for 循环来完成,我在下面提供了我的代码。但是,我真的很想知道这是否可以在没有 for 循环的情况下完成。是否正在考虑使用过滤器方法的可能方法?

我的 for 循环代码

function findThePrimes(num) {
  let nonPrimes  = [], i, j, primes = [];
  for (i = 2; i <= num; ++i) {
    if (!nonPrimes [i]) {
      primes.push(i);
      for (j = i << 1; j <= num; j += i) {
        nonPrimes[j] = true;
      }
    }
  }
  return primes;
}
console.log(findThePrimes(100))

寻找类似于下面代码的东西

function findThePrimes(num) {
  numArr = Array.from({length: num}, (v, k) => k+1)
  const primeNum = []
  const takeOutPrimes = numArr.filter(num => ...not sure what to do next that will push prime numbers into the primeNum array)
}
console.log(findThePrimes(ANY_NUMBER))

标签: javascript

解决方案


@TylerRoper 给了我一个代码的链接,该代码很接近,但唯一缺少的是素数数组中的 2。所以我设置了一个允许 2 的条件。

这样可以更干净吗???

const isPrime = n => Array(Math.ceil(Math.sqrt(n)+1)).fill().map((e,i)=>i).slice(2).every(m => n%m);
const primeArr = Array(n).fill().map((e,i)=>i+1).slice(1).filter(isPrime)
if (n >= 2) {
  primeArr.unshift(2)
}
return primeArr
}
console.log(findPrime(1000).length);```

推荐阅读