Расчет простого числа веб-работника

Я пытаюсь создать 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 для этого кода, чтобы играть с

Другие вопросы по тегам