[Algorithm] Finding Prime numbers - Sieve of Eratosthenes

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)

猜你喜欢

转载自www.cnblogs.com/Answer1215/p/10865257.html