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