mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-09-20 07:43:04 +08:00
Add linear prime sieve
This commit is contained in:
parent
45fb2a24be
commit
01f14089a5
24
src/algorithms/math/linear-prime-sieve/linearPrimeSieve.js
Normal file
24
src/algorithms/math/linear-prime-sieve/linearPrimeSieve.js
Normal file
@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @param {number} maxNumber
|
||||
* @return {number[]}
|
||||
*/
|
||||
export default function linearPrimeSieve(maxNumber) {
|
||||
const primes =[];
|
||||
const leastPrimeFactor = new Array(maxNumber + 1).fill(0); // leastPrimeFactor[i] gives us the least prime factor of 'i'
|
||||
|
||||
for(let i=2; i<=maxNumber; i++ ){
|
||||
if(!leastPrimeFactor[i]){ // leastPrimeFactor[i] = 0 means 'i' itself is its least prime factor, i.e 'i' is prime
|
||||
leastPrimeFactor[i] = i;
|
||||
primes.push(i);
|
||||
}
|
||||
|
||||
/*
|
||||
* start setting leastPrimeFactor[] for numbers 'x', where x = p * i, p is x's least prime factor and p <= leastPrimeFactor[i]
|
||||
* x = p*i, this representation will be unique for any number, therefore leastPrimeFactor[x] will be set only once.
|
||||
*/
|
||||
for(let j=0; j<primes.length && primes[j]*i <=maxNumber && primes[j]<=leastPrimeFactor[i]; j++)
|
||||
leastPrimeFactor[primes[j]*i] = primes[j];
|
||||
}
|
||||
|
||||
return primes;
|
||||
}
|
Loading…
Reference in New Issue
Block a user