С первичным вычислением вы рассматривали возможность использования Сито Эратосфена ? Это гораздо более элегантный способ определения простых чисел, и суммирование результатов просто.
var sieve = new Array();
var maxcount = 250;
var maxsieve = 10000;
// Build the Sieve, marking all numbers as possible prime.
for (var i = 2; i < maxsieve; i++)
sieve[i] = 1;
// Use the Sieve to find primes and count them as they are found.
var primes = [ ];
var sum = 0;
for (var prime = 2; prime < maxsieve && primes.length < maxcount; prime++)
{
if (!sieve[prime]) continue;
primes.push(prime); // found a prime, save it
sum += prime;
for (var i = prime * 2; i < maxsieve; i += prime)
sieve[i] = 0; // mark all multiples as non prime
}
document.getElementById("result").value =
"primes: " + primes.join(" ") + "\n"
+ "count: " + primes.length + "\n"
+ "sum: " + sum + "\n";
#result {
width:100%;
height:180px
}
<textarea id="result">
</textarea>
(РЕДАКТИРОВАТЬ) С обновленным алгоритмом теперь задействованы два максимума:
- maxcount - максимальное количество простых чисел, которое вы хотите найти
- maxsieve - это предположение о сите, достаточно большом, чтобы содержать maxcount простых чисел
Вы должны будете проверить это, фактически проверив действительный count , поскольку есть два условия завершения (1) мы достигли предела нашего сита и не можем найти больше простых чисел, или (2) мы фактически нашел то, что мы ищем.
Если вы увеличите число до чисел, намного превышающих 250, сито больше не станет жизнеспособным, поскольку будет потреблять большие объемы памяти. Во всяком случае, я думаю, что все это имеет смысл, верно? В этот момент вам действительно нужно поиграть с Ситом, а не полагаться на мою интерпретацию.