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.