10) Summation of primes
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million.
by fosco
JavaScript
function isPrime(n) {
if (n === 1) {
return false;
} else if (n < 4) {
return true; //2 and 3 are prime
} else if (n % 2 === 0) {
return false;
} else if (n < 9) {
return true; //we have already excluded 4,6 and 8.
} else if (n % 3 === 0) {
return false;
} else {
var r = Math.floor(Math.sqrt(n)), // n rounded to the greatest integer r so that r*r<=n
f = 5;
while (f <= r) {
if (n % f === 0) {
return false;
}
if (n % (f + 2) === 0) {
return false;
}
f += 6;
}
}
return true;
}
function sumOfPrimesBelow(number) {
var value = 1,
sum = 2;
while (true) {
value += 2;
if (!isPrime(value)) {
continue;
}
if (value > number) {
break;
}
sum += value;
}
return sum;
}
console.time('sumOfPrimesBelow');
console.log(sumOfPrimesBelow(2000000)); //142913828922
console.timeEnd('sumOfPrimesBelow'); //596.794ms
function sumOfPrimesBelowWithSieve(n) {
var sieve = [];
for (var k = 2; k <= n; k++) {
sieve[k] = 1;
}
for (k = 2; k * k <= n; k++) {
if (sieve[k] == 1) {
for (var l = k * k; l <= n; l += k) {
sieve[l] = 0;
}
}
}
var sum = 0;
sieve.forEach(function(val, key){
if (val === 1) {
sum += key;
}
});
return sum;
}
console.time('sumOfPrimesBelowWithSieve');
console.log(sumOfPrimesBelowWithSieve(2000000)); //104743
console.timeEnd('sumOfPrimesBelowWithSieve'); //440.432ms