Hi,
I got to solve this problem after a while, but I realized that I am repeating myself to much ( I think). So I was trying to find out how others solved the problem. In the guide, there is a basic, intermediate and advanced solution. But there are things I don’t understand. I would appreciate if someone could explain them for me.
This is my solution:
function sumPrimes(num) {
var newArray = [];
for(var i = 2; i <= num; i++){
if(i == 2){
newArray.push(i);
} else if( i % 2 != 0){
var counter = 0;
var j = 3;
if(i == 3){
newArray.push(i);
} else {
while(counter == 0 && j < i){
if(i % j == 0){
counter++;
} else {
j = j + 2;
}
}
if(counter == 0){
newArray.push(i);
}
}
}
}
var sum = newArray.reduce(function(a,b){return a + b;})
return sum;
}
sumPrimes(10);
This is the basic solution on the guide:
function sumPrimes(num) {
var res = 0;
// Function to get the primes up to max in an array
function getPrimes(max) {
var sieve = [];
var i;
var j;
var primes = [];
for (i = 2; i <= max; ++i) {
if (!sieve[i]) {
// i has not been marked -- it is prime
primes.push(i);
for (j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}
// Add the primes
var primes = getPrimes(num);
for (var p = 0; p < primes.length; p++) {
res += primes[p];
}
return res;
}
// test here
sumPrimes(10);
I am not understanding at all, why the sieve array is initiated, but nothing is ever “pushed” into the array, I mean, the array is empty the whole time, isn’t it?
what is the code trying to do with:
if (!sieve[i]){...}
Also, why does the code use a bitwise operator?
for (j = i << 1; j <= max; j += i)
I appreciate any help.
edit: I appreciate if anybody could explain me how to blur things up. I have tried to blur the solutions but they don’t get blurred, but everythings becomes weird.