Given a number N, the output should be the all the prime numbers which is less than N.
The solution is called Sieve of Eratosthenes:
First of all, we assume all the number from 2 to N are prime number (0 & 1 is not Prime number).
According to the Primse number defination that Prime number can only be divided by 1 & itself. So what we do is start from
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
...
2 * j <= N
3 * 2 = 6
3 * 3 = 9
...
i * j <= N
i is from 2 to N.
We are going to mark all the caluclated number to be Not prime numbers. In the end, the remining numbers should be Primes.
function findPrime (n) { let primes = []; for (let i = 0; i <= n; i++) { primes.push(1); } primes[0] = 0; primes[1] = 0; for (let i = 2; i <= Math.sqrt(n); i++) { if (primes[i] === 1) { for (let j = 2; i * j <= n; j++) { primes[i * j] = 0; } } } return primes.map((val, index) => val === 1 ? index: 0).filter(Boolean); } findPrime(14) // [ 2, 3, 5, 7, 11, 13 ]
One optimization, we don't need to loop i from 2 to N, it is enough from 2 to Math.sqrt(n)