Расчет простого числа веб-работника
Я пытаюсь создать HTML 5 Web Worker, который будет вычислять количество простых чисел (начиная с 1) для заданного значения: Мой код JavaScript:
var found = 0;
var n = 1;
var total = 0;
var THRESHOLD = 10;
while (total < THRESHOLD) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i++) {
if (!(n % i == 0)) {
total++;
postMessage(found);
}
else {
found++;
}
}
}
Этот код основан на: http://www.codeproject.com/Articles/250102/An-HTML-progressbar-using-web-workers Однако сценарий Web Worker возвращает значение 8, что, очевидно, неверно для входного числа 10. Куда я здесь иду не так?
2 ответа
Ваша логика неверна, вы можете быть уверены в простом числе, только если оно не делится до конца. Если он делится между ними, он не прост. Я обновил код ниже.
var found = 0;
var n = 1;
var total = 0;
var THRESHOLD = 10;
while (total < THRESHOLD) {
n += 1;
found = 0 ;
for (var i = 2; i <= Math.sqrt(n); i++) {
if ((n % i == 0)) {
found = 1;
break;
}
}
if(found == 0)
total++;
postMessage(found);
}
Попробуйте переместить определение простого числа за пределы:
var n = 0
,total = 0;
,THRESHOLD = 10;
while (++n < THRESHOLD) {
total += isPrime(n) ? 1 : 0;
}
postMessage(total); //=> 4
function isPrime(number) {
var start = 2;
while (start <= Math.sqrt(number)) {
if (number % start++ < 1) return false;
}
return number > 1;
}
Посмотрите этот ТАК ответ для isPrime
функция
Вот jsFiddle для этого кода, чтобы играть с