I have been trying to write Sieve of Eratosthenes algorithm in JavaScript. Basically I just literally followed the steps below:
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.