Prime number generation

Problem is to generate prime numbers.

  • A. Generate prime numbers below 100.
  • B. Generate first 100 prime numbers.
  • C. Generate first 10,000 prime numbers.
  • D. Generate first million prime numbers.
  • E. Generate first billion prime numbers.
  • F. Generate first trillion prime numbers.

Theory

A prime number is one that is not divisible by any other prime number. Any number above 1, that is not divisible by anyother number by itself, falls into a prime number category.

2, 3, 5, 7 are first four primes.

1, 4, 6, 8, 9 are first five non prime numbers.

Solutions

A


    var generatePrimeNumbersBelow = function(n){
      var start = 2, end = n, i, j, isPrime;
      for(i = 2; i < end; i++) {
        isPrime = true;
        for(j = start; j < i && isPrime; j++) {
          if(i % j === 0){
            isPrime = false;
          }
        }
        if(isPrime){
          console.log(i, "is a prime number.");
        }
      }
    };

    generatePrimeNumbersBelow(100);


    --- 
    Output
    ---

    2 is a prime number.
    3 is a prime number.
    5 is a prime number.
    7 is a prime number.
    11 is a prime number.
    13 is a prime number.
    17 is a prime number.
    19 is a prime number.
    23 is a prime number.
    29 is a prime number.
    31 is a prime number.
    37 is a prime number.
    41 is a prime number.
    43 is a prime number.
    47 is a prime number.
    53 is a prime number.
    59 is a prime number.
    61 is a prime number.
    67 is a prime number.
    71 is a prime number.
    73 is a prime number.
    79 is a prime number.
    83 is a prime number.
    89 is a prime number.
    97 is a prime number.

Same code can be written in ES2015 as:


    let generatePrimeNumbersBelow = function(n){
      let start = 2, end = n, i, j, isPrime;
      for(i = 2; i < end; i++) {
        isPrime = true;
        for(j = start; j < i && isPrime; j++) {
          if(i % j === 0){
            isPrime = false;
          }
        }
        if(isPrime){
          console.log(i, "is a prime number.");
        }
      }
    };

    generatePrimeNumbersBelow(100);

Same code in CoffeeScript:

    generatePrimeNumbersBelowN = (n) ->
      i = 2
      while i < n
        isPrime = true
        j = 2
        while j < i
          isPrime = false if i % j == 0
          break if not isPrime
          j++
        console.log(i, "is Prime Number.") if isPrime
        i++

    generatePrimeNumbersBelowN(100);

Note: for j in [2..i-1] doesn't work.

B and C


    var PrimeGenerator = function(n) {
      var self = this instanceof PrimeGenerator ? this : Object.create(PrimeGenerator.prototype);
      self.upto = n;
      self.primes = [];
      self.generate = function() {
        var i, j, isPrime;
        for(i = 2; this.primes.length < this.upto; i++){
          isPrime = true;
          for(j = 2; j < i && isPrime; j++) {
            if(i % j === 0) {
              isPrime = false;
            }
          }
          if(isPrime){
            this.primes.push(i);
          }
        }
      };
      self.print = function(){
        console.log("There are", this.primes.length, "prime numbers.");
        this.primes.forEach(function(p) {
          console.log(p, "is a prime.");
        });
      };
      return self;
    };

    var first100Primes = new PrimeGenerator(100);
    first100Primes.generate();
    first100Primes.print();

    var firstTenThousandPrimes = new PrimeGenerator(10000);
    firstTenThousandPrimes.generate();
    firstTenThousandPrimes.print();

Now, we need to be faster.