BeriaFantom
@BeriaFantom
Full Stack Razrabotchik

Как работает решето Эратосфена(алгоритм) в JavaScript?

var arr = [];

for (var i = 2; i < 100; i++) {arr[i] = true;}

var p = 2;
do {

  for (i = 2 * p; i < 100; i += p) {arr[i] = false;}

  for (i = p + 1; i < 100; i++) {
    if (arr[i]) break;
  }
  p = i;
} while (p * p < 100); // шаг 5

// Вычисление
var sum = 0;
for (i = 0; i < arr.length; i++) {
  if (arr[i]) {sum += i;}
}
alert(sum);

Не совсем понимаю, как работает этот скрипт, в частности, как работает второй цикл for в родительском цикле do, почему нужно использовать break в этом цикле, и почему условие while такое какое оно есть. С суммой как-нибудь разберусь
  • Вопрос задан
  • 4392 просмотра
Решения вопроса 2
На википедии достаточно неплохо все описано Вики

второй цикл прерывается, чтобы найти первое число у которого значение true (т.е. оно не зачеркнуто), а затем повторять зачеркивать не простые числа
ищем мы пока квардрат последнего найденного незачеркнутого числа меньше 100
а вообще скрипт считает сумму всех простых чисел не превосходящих 100
Ответ написан
Stalker_RED
@Stalker_RED
Решето Эратосфена работает так: https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%88%D...
И его работа не зависит от того, на каком языка вы его пишете.
Первый цикл for-внутри-do-while отмечает как НЕпростые все числа, которые получаются перемножением i и p
Второй цикл for-внутри-do-while проверяет не является ли простым текущее значение i, и если оно простое, завершает свою работу. При этом do-while перезапускается, но уже с новым значением p.
Условие while (p * p < 100) можно оптимизировать так: while (p < 10)

Добавил флуда в консоль, чтоб было понятнее что происходит: https://jsfiddle.net/L1ahatbk/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы