• [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)

  • 相关阅读:
    pip 或 pip3 升级操作
    virtualenv和virtualenvwrapper 的安装和使用
    打包 Framework 时使用 CocoaPods 引入第三方库的方法
    数据库-代码建表
    Oracle-数据库
    JAVA-网络编程
    JAVA-枚举
    JAVA-多线程
    0927-练习
    JAVA-流
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10865257.html
Copyright © 2020-2023  润新知