是否可以找到素数而不使用for循环?可以仅使用filter方法吗?

时间:2019-06-13 14:27:46

标签: javascript

在给定的输入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))

1 个答案:

答案 0 :(得分:0)

@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);```