Skip to content

Instantly share code, notes, and snippets.

@Zaidos
Last active December 19, 2015 13:39
Show Gist options
  • Save Zaidos/5963680 to your computer and use it in GitHub Desktop.
Save Zaidos/5963680 to your computer and use it in GitHub Desktop.
Prime Number Utilities
var number = {
primes: [],
computeSieve: function(max) {
var composites = [], primes = [];
for ( var composite = 2; composite < max; composite++ ) {
this.computeComposite(primes, composites, composite, max);
}
return primes;
},
computeComposite: function(primes, composites, composite, max) {
var currentComposite = composites[composite];
if ( currentComposite) {
for ( var i = 0; i < currentComposite.length; i++ ) {
var potentialPrime = currentComposite[i];
var newComposite = ( potentialPrime + composite );
if ( composites[newComposite] ) {
composites[newComposite].push(potentialPrime);
} else {
composites[newComposite] = [potentialPrime];
}
}
delete composites[composite];
} else {
primes.push(composite);
var newComposite = ( composite * composite );
if ( !max || newComposite < max ) {
composites[newComposite] = [composite];
}
}
},
generateToAmount: function(amount) {
var composites = [], primes = [], composite = 2;
while ( primes.length < amount ) {
this.computeComposite(primes, composites, composite);
composite++;
}
return primes;
},
containsNumber: function(number) {
return this.primes.indexOf(number) !== -1;
},
isPrime: function(number) {
if ( number == 2 || number == 3 )
return true;
if ( this.primes.length <= 0 || !this.containsNumber(number)) {
this.primes = this.computeSieve(number + 1);
}
return this.containsNumber(number);
},
generatePrimes: function(amount) {
if ( this.primes.length >= amount )
return this.primes.slice(0, amount - 1);
this.primes = this.generateToAmount(amount);
return this.primes;
}
};
var command = process.argv[2];
var arg = parseInt(process.argv[3]);
if ( !command || !arg ) {
console.log('usage: node prime.js [/g amount] [/c number]');
return;
}
switch ( command ) {
case '/c':
console.log('Checking if ' + arg + ' is a prime number');
console.log(number.isPrime(arg));
break;
case '/g':
console.log('Generating ' + arg + ' prime numbers');
console.log(number.generatePrimes(arg));
break;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment