zoukankan      html  css  js  c++  java
  • [Algorithm] Finding Prime numbers

    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)

  • 相关阅读:
    SuperMap关联外部数据库
    617Tips
    第一次上课
    文本字段也可做自定义专题图
    Oracle笔记一
    Oracle笔记二
    复制追加数据集失败
    夏季恋语
    最浪漫的事
    爱了你那么多年
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10865257.html
Copyright © 2011-2022 走看看