Skip to content

Instantly share code, notes, and snippets.

@hiroshi-maybe
Last active December 29, 2015 07:09
Show Gist options
  • Select an option

  • Save hiroshi-maybe/7634164 to your computer and use it in GitHub Desktop.

Select an option

Save hiroshi-maybe/7634164 to your computer and use it in GitHub Desktop.
3 different implementations to get prime numbers in limited range.
// 71 ms for input:1000000
var prime_procedural = function(end) {
var i,j,n;
var sieve = [],
primes = [];
sieve[0]=false;
for(i=1; i<end+1; i+=1) {
sieve[i]=true;
}
for(i=2; i<Math.ceil(Math.sqrt(end))+1; i+=1) {
if (sieve[i-1]) {
for(j=2; (n=i*j)<sieve.length; j+=1) {
sieve[n-1] = false;
}
}
}
for(i=0; i<last; i+=1) {
if (sieve[i]) { primes.push(i+1); }
}
return primes;
};
// 3816 ms for input:1000000
var prime_reduce = function(end) {
var src,
sieve_limit = Math.sqrt(end),
range = function(start,end) {
var i, result=[];
for(i=start; i<end+1; i+=1) {
result.push(i);
}
return result;
};
return (src=range(2,end))
.reduce(function(memo, i) {
if (i>sieve_limit) { return memo; }
// Performance Alert: Visiting redundant elements(<=i)
return memo.filter(function(n){ return (n<=i) || (n%i !== 0); });
}, src);
};
// 1063 ms for input:1000000
var prime_rec = function(end) {
var src,
sieve_limit = Math.sqrt(end),
range = function(start,end) {
var i, result=[];
for(i=start; i<end+1; i+=1) {
result.push(i);
}
return result;
},
prime_filter = function(ls) {
var i = ls.shift();
if (i<=sieve_limit) {
ls = ls.filter(function(n){ return n%i !== 0; });
ls = prime_filter(ls);
}
return [i].concat(ls);
};
return prime_filter(range(2,end));
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment