From 0084acf2d4dc9ac9bc32a5db6cd27255f0835ae7 Mon Sep 17 00:00:00 2001 From: ddaniel27 <67126972+ddaniel27@users.noreply.github.com> Date: Thu, 20 Oct 2022 06:20:37 -0500 Subject: [PATCH] algorithm: sieve (#1205) --- Maths/SieveOfEratosthenesIntArray.js | 22 +++++++++++++++++++ .../test/SieveOfEratosthenesIntArray.test.js | 12 ++++++++++ 2 files changed, 34 insertions(+) create mode 100644 Maths/SieveOfEratosthenesIntArray.js create mode 100644 Maths/test/SieveOfEratosthenesIntArray.test.js diff --git a/Maths/SieveOfEratosthenesIntArray.js b/Maths/SieveOfEratosthenesIntArray.js new file mode 100644 index 000000000..7de49ffb7 --- /dev/null +++ b/Maths/SieveOfEratosthenesIntArray.js @@ -0,0 +1,22 @@ +/** + * Function to get all prime numbers below a given number + * This function returns an array of prime numbers + * @see {@link https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes} + */ + +function sieveOfEratosthenes (max) { + const sieve = [] + const primes = [] + + for (let i = 2; i <= max; ++i) { + if (!sieve[i]) { // If i has not been marked then it is prime + primes.push(i) + for (let j = i << 1; j <= max; j += i) { // Mark all multiples of i as non-prime + sieve[j] = true + } + } + } + return primes +} + +export { sieveOfEratosthenes } diff --git a/Maths/test/SieveOfEratosthenesIntArray.test.js b/Maths/test/SieveOfEratosthenesIntArray.test.js new file mode 100644 index 000000000..eeb6dd9d8 --- /dev/null +++ b/Maths/test/SieveOfEratosthenesIntArray.test.js @@ -0,0 +1,12 @@ +import { sieveOfEratosthenes } from '../SieveOfEratosthenesIntArray' +import { PrimeCheck } from '../PrimeCheck' + +describe('should return an array of prime numbers', () => { + it('should have each element in the array as a prime numbers', () => { + const n = 100 + const primes = sieveOfEratosthenes(n) + primes.forEach(prime => { + expect(PrimeCheck(prime)).toBeTruthy() + }) + }) +})