Sieve of Eratosthenes algorithm in JavaScript running endless for large number

后端 未结 7 1986
孤街浪徒
孤街浪徒 2020-11-30 02:47

I have been trying to write Sieve of Eratosthenes algorithm in JavaScript. Basically I just literally followed the steps below:

  1. Create a list of consecutive in
7条回答
  •  臣服心动
    2020-11-30 03:13

    This algorithm takes few millisec (ok 2 - big test # time=498.815ms) per 1 million:

    module.exports.fast = function eratosthenes (max) {
      let sqrt = Math.sqrt(max)
      let sieve = new Array(max).fill(0)
    
      for (let primeCandidate = 2; primeCandidate < sqrt; primeCandidate++) {
        if (sieve[primeCandidate] === true) {
          continue // already processed
        }
        for (let multiple = primeCandidate * primeCandidate; multiple < max; multiple += primeCandidate) {
          if (sieve[multiple] === 0) {
            sieve[multiple] = true
          }
        }
      }
    
      return sieve
        .map((isPrime, i) => ({ i, isPrime })) // find the number associated with the index
        .filter(({ i, isPrime }) => isPrime === 0 && i >= 2) // remove not prime numbers
        .map(({ i }) => i) // output only the values
    }
    

    eratosthenes(1000000) returns an array with 78498 prime numbers.

提交回复
热议问题