From 968ac86d429a773d1c5905e88ca684feb90a3842 Mon Sep 17 00:00:00 2001 From: ddaniel27 <67126972+ddaniel27@users.noreply.github.com> Date: Tue, 18 Oct 2022 09:20:31 -0500 Subject: [PATCH 1/2] [CREATE] Add another sieve algorithm This algorithm is a distinct implementation of the current sieve in the repo because this returns an array of integers that only contain prime numbers. --- Maths/SieveOfEratosthenesIntArray.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Maths/SieveOfEratosthenesIntArray.js diff --git a/Maths/SieveOfEratosthenesIntArray.js b/Maths/SieveOfEratosthenesIntArray.js new file mode 100644 index 0000000000..7de49ffb73 --- /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 } From 648da2647e8afd1effefddf61dcefa03ca6b0d7f Mon Sep 17 00:00:00 2001 From: Daniel Dorado Date: Tue, 18 Oct 2022 11:54:56 -0500 Subject: [PATCH 2/2] [UPDATE] Add tests for SieveOfEratosthenesIntArray --- Maths/test/SieveOfEratosthenesIntArray.test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Maths/test/SieveOfEratosthenesIntArray.test.js diff --git a/Maths/test/SieveOfEratosthenesIntArray.test.js b/Maths/test/SieveOfEratosthenesIntArray.test.js new file mode 100644 index 0000000000..eeb6dd9d8b --- /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() + }) + }) +})