Nic Meiring - 4 months ago 13

Javascript Question

`var sum = 0`

for (i = 0; i < 250; i++) {

function checkIfPrime() {

for (factor = 2; factor < i; factor++) {

if (i % factor = 0) {

sum = sum;

}

else {

sum += factor;

}

}

}

}

document.write(sum);

I am trying to check for the sum of all the prime numbers under 250. I am getting an error saying that i is invalid in the statement

`if (i % factor = 0)`

Answer

With the prime computation, have you considered using Sieve of Eratosthenes? This is a much more elegant way of determining primes, and, summing the result is simple.

```
var sieve = new Array();
var i = 0;
var maxcount = 250;
var maxsieve = 10000;
var prime = 0;
var sum = 0;
var count = 0;
// Build the Sieve.
for (i = 2; i <= maxsieve; i++)
{
sieve[i] = 1;
}
// Use the Sieve to find primes and count them as they are found.
for (prime = 2; prime <= maxsieve && count < maxcount; prime++)
{
if (sieve[prime] == 1)
{
count += 1;
sum += prime;
for (i = prime * 2; i <= maxsieve; i += prime)
{
sieve[i] = 0;
}
}
}
```

(EDIT) With the updated algorithm, there are now two max involved:

**maxcount**is the maximum number of prime numbers you wish to find**maxsieve**is a guess of sieve large enough to contain**maxcount**primes

You will have to validate this by actually checking the real **count** since there are two terminating conditions (1) we hit the limit of our sieve and cannot find any more primes, or (2) we actually found what we're looking for.

If you were to increase the number to numbers much greater than 250, than the Sieve no longer becomes viable as it would be consume great deals of memory. Anyhow, I think this all makes sense right? You really need to play with the Sieve yourself at this point than rely on my interpretation of it.