mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
merge: Add LinearSieve.js (#828)
This commit is contained in:
24
Maths/LinearSieve.js
Normal file
24
Maths/LinearSieve.js
Normal file
@ -0,0 +1,24 @@
|
||||
const LinearSieve = (n) => {
|
||||
/*
|
||||
* Calculates prime numbers till a number n
|
||||
* Time Complexity: O(n)
|
||||
* Explanation: https://cp-algorithms.com/algebra/prime-sieve-linear.html
|
||||
* :param n: Number up to which to calculate primes
|
||||
* :return: A list containing only primes
|
||||
*/
|
||||
const isnPrime = new Array(n + 1)
|
||||
isnPrime[0] = isnPrime[1] = true
|
||||
const primes = []
|
||||
for (let i = 2; i <= n; i++) {
|
||||
if (!isnPrime[i]) primes.push(i)
|
||||
for (const p of primes) {
|
||||
const k = i * p
|
||||
if (k > n) break
|
||||
isnPrime[k] = true
|
||||
if (i % p === 0) break
|
||||
}
|
||||
}
|
||||
return primes
|
||||
}
|
||||
|
||||
export { LinearSieve }
|
16
Maths/test/LinearSieve.test.js
Normal file
16
Maths/test/LinearSieve.test.js
Normal file
@ -0,0 +1,16 @@
|
||||
import { LinearSieve } from '../LinearSieve'
|
||||
import { PrimeCheck } from '../PrimeCheck'
|
||||
|
||||
describe('LinearSieve', () => {
|
||||
it('should return primes below 100', () => {
|
||||
expect(LinearSieve(100)).toEqual([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])
|
||||
})
|
||||
|
||||
it('should return primes only', () => {
|
||||
const n = 100000
|
||||
const primes = LinearSieve(n)
|
||||
for (const p of primes) {
|
||||
expect(PrimeCheck(p)).toBeTruthy()
|
||||
}
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user