Алгоритм простых чисел в JS

182
11 сентября 2021, 13:10

Понимаю как нелепо может выглядеть этот вопрос,и как криво я описал проблему,но я новичок в этом деле,так что сорре

Учу сейчас JS на learn.javascript.ru,дошел до раздела функции.Там можно встретить такой вот алгоритм:


function showPrimes(n) {
  nextPrime: for (let i = 2; i < n; i++) {
    for (let j = 2; j < i; j++) {
      if (i % j == 0) continue nextPrime;
    }
    alert( i ); // простое
  }
}
showPrimes(10);

Не понимаю как оно работает,пробовал уже и на бумажке смотреть.Функция собственно выводит простые числа от 2 до n.Вот как по мне должна работать функция:

Вызываем функцию showPrimes() со значением 10 >>

Изначально i во внешнем цикле,и j во внутреннем равны 2,так что внутренний цикл не срабатывает и выводится 2 (alert(i))>>

Переходим на следующую итерацию внешнего цикла,i становиться 3 >>

Срабатывает внутренний for,идет проверка на остаток деления >>

Т.к остаток от деления 3 на 2 не является 0,continue не срабатывает>>

теперь уже внутренний цикл начинает новую итерацию,j становится 3,i у нас также остается 3 значит цикл не срабатывает и alert выводит 3 >>

i = 4 j = 3,внутренний цикл срабатывает,остаток не равен 0 значит переходим на след.итерацию j становиться 4,а значит внутренний цикл не запускается и выводится 4,но 4 выводится не должно(да и не выводится,программа работает корректно,просто я не правильно все понимаю скорее всего) Так где же я не прав?

Answer 1

Т.к. во внутреннем цикле условие j < i, то j никогда не будет равно i и комбинация 4%4 попросту не вычисляется, а начинается следующая итерация внешнего цикла с i = 5.

При каждом новом j внутренний цикл стартует заново (с 2), поэтому проверка 4 (и вообще всех четных чисел) заканчивается уже на 2, так как 4%2 равняется 0.

Answer 2

Пропустив этот момент я продолжил изучать учебник дальше,дошел до изучения отладчика и воспользовался им,дело в том что j во внутреннем цикле постоянно сбрасывает свое значение к двум при каждой итерации внешнего цикла.Короче совет таким же бубунам как и я,используйте отладчик:)

READ ALSO
Как исключить многократную загрузку Javascript?

Как исключить многократную загрузку Javascript?

В расширении Google Chrome, установлено событие, которое отслеживает загрузку определенной страницы сайта exemplecom:

88
Функции в качестве параметров

Функции в качестве параметров

Какую функцию выполняет func(), то есть в чем смысл использования этой функции там

111
Чтение из файла fstream

Чтение из файла fstream

Вот у меня есть задание, знаю что легче через структуру FILE, но задание - сделать с fstreamЗаписываем информацию про студентов: имя, группа, оценки...

115