merge: optamization,documantation,return Array[bool] => Array[primes only], test case (#841)

This commit is contained in:
YATIN KATHURIA
2021-11-20 17:15:36 +05:30
committed by GitHub
parent 93e57b0de5
commit 02a4cee5c2
2 changed files with 41 additions and 11 deletions

View File

@ -1,21 +1,28 @@
function sieveOfEratosthenes (n) { /**
/* * @function SieveOfEratosthenes
* Calculates prime numbers till a number n * @description Calculates prime numbers till input number n
* :param n: Number up to which to calculate primes * @param {Number} n - The input integer
* :return: A boolean list containing only primes * @return {Number[]} List of Primes till n.
* @see [Sieve_of_Eratosthenes](https://www.geeksforgeeks.org/sieve-of-eratosthenes/)
*/ */
const primes = new Array(n + 1) function sieveOfEratosthenes (n) {
primes.fill(true) // set all as true initially if (n <= 1) return []
const primes = new Array(n + 1).fill(true) // set all as true initially
primes[0] = primes[1] = false // Handling case for 0 and 1 primes[0] = primes[1] = false // Handling case for 0 and 1
const sqrtn = Math.ceil(Math.sqrt(n)) for (let i = 2; i * i <= n; i++) {
for (let i = 2; i <= sqrtn; i++) {
if (primes[i]) { if (primes[i]) {
for (let j = 2 * i; j <= n; j += i) { for (let j = i * i; j <= n; j += i) {
primes[j] = false primes[j] = false
} }
} }
} }
return primes
return primes.reduce((result, isPrime, index) => {
if (isPrime) {
result.push(index)
}
return result
}, [])
} }
// Example // Example

View File

@ -0,0 +1,23 @@
import { sieveOfEratosthenes } from '../SieveOfEratosthenes'
describe('SieveOfEratosthenes', () => {
it('Primes till 0', () => {
expect(sieveOfEratosthenes(0)).toEqual([])
})
it('Primes till 1', () => {
expect(sieveOfEratosthenes(1)).toEqual([])
})
it('Primes till 10', () => {
expect(sieveOfEratosthenes(10)).toEqual([2, 3, 5, 7])
})
it('Primes till 23', () => {
expect(sieveOfEratosthenes(23)).toEqual([2, 3, 5, 7, 11, 13, 17, 19, 23])
})
it('Primes till 70', () => {
expect(sieveOfEratosthenes(70)).toEqual([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67])
})
})