mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
merge: optamization,documantation,return Array[bool] => Array[primes only], test case (#841)
This commit is contained in:
@ -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
|
||||||
|
23
Dynamic-Programming/tests/SieveOfEratosthenes.test.js
Normal file
23
Dynamic-Programming/tests/SieveOfEratosthenes.test.js
Normal 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])
|
||||||
|
})
|
||||||
|
})
|
Reference in New Issue
Block a user