Skip to content

Instantly share code, notes, and snippets.

@dreamyguy
Created December 12, 2022 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dreamyguy/f90c1464dc63be87b689248131025183 to your computer and use it in GitHub Desktop.
Save dreamyguy/f90c1464dc63be87b689248131025183 to your computer and use it in GitHub Desktop.
Sieves – Find all prime numbers below a given number
// See https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
function sieveOfEratosthenes(n) {
// Create a boolean array "prime[0..n]" and
// initialize all entries it as true.
// A value in prime[i] will finally be false
// if i is Not a prime, else true.
let prime = new Array(n + 1).fill(true);
// Create the Sieve
for (let p = 2; p * p <= n; p++) {
// If prime[p] is not changed, then it is
// a prime
if (prime[p] === true) {
// Update all multiples of p
for (let i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// Print all prime numbers
let primes = [];
for (let p = 2; p <= n; p++)
if (prime[p])
primes.push(p);
return primes;
}
// Find the primes less than 100
let primes = sieveOfEratosthenes(100);
// console.log(primes); // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
// See https://en.wikipedia.org/wiki/Sieve_of_Sundaram
function sieveOfSundaram(n) {
// Create a boolean array "prime[0..n]" and
// initialize all entries it as true.
// A value in prime[i] will finally be false
// if i is Not a prime, else true.
let prime = new Array(n + 1).fill(true);
// Initialize the p integers to be used
// in the Sieve
let p = 2 * n + 2;
// Create the Sieve
for (let i = 1; i <= n; i++)
for (let j = i; j <= (n - i) / (2 * i + 1); j++)
prime[i + j + 2 * i * j] = false;
// Print the primes that are
// not marked in the Sieve
let primes = [];
for (let i = 1; i <= n; i++)
if (prime[i])
primes.push(p - 2 * i);
return primes;
}
// Find the primes less than 100
let primes = sieveOfSundaram(100);
// console.log(primes); // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment