Двойной цикл for
Есть задача:
Код:
Вывести простые числа
let n = 10;
nextPrime:
for (let i = 2; i <= n; i++) { // Для всех i...
for (let j = 2; j < i; j++) { // проверить, делится ли число..
if (i % j == 0) continue nextPrime; // не подходит, берём следующее
}
alert( i ); // простое число
}
Правильно я понимаю? Речь про строку if (i % j == 0) continue nextPrime; За первой итерацией будет проверяться остаток от деления 3/2? i до того как дойдет до второго внутреннего for из-за i++ станет 3, хотя он стартовал с 2 и затем будет в If проверяться остаток от деления 3/2 (три на два за первым прогоном цикла)? |
delete
|
Вроде разобрался, гляньте, правильно ли я понял?
1. В самом начале во Внутренним цикле for идет сравнение 2<2?
(i=2, j=2) нет 2 не меньше двух, Внутренний цикл for не выполняется, так
как условие ложь и идёт переход со внутреннего во внешний цикл for где
выполняется инструкция с выводом document.write(i+"<br>"); Выводим в конечный
результат Первую цифру 2 на экран.
<-------------------------------------------------------------------------------------------------->
2. i увеличивается на один во внешнем цикле for, i =3, Далее во внутреннем
цикле for идёт сравнение 2<3? (j=2, i=3) Да, 2 меньше трех и выполняется
условие if Во внутреннем цикле. 3/2 дает остаток 0? Нет, не дает, Идёт возврат снова
во внутренний цикл где (j=3, i=3), 3<3? Нет, не меньше, Внутренний Цикл for
не выполняется Идёт переход во внешний цикл For в котором выполняется инструкция
document.write(i+"<br>"); Выводим в конечный результат цифру 3 на экран.
<-------------------------------------------------------------------------------------------------->
3.i увеличивается на один во внешнем цикле for, i =4, Далее во внутреннем
цикле for идёт сравнение 2<4? (j=2, i=4) Да, 2 меньше 4 и выполняется условие
if Во внутреннем цикле. 4/2 дает остаток 0 -это истинна и идет переход
к метке nextPrimе. Запускается внешний цикл снова, увеличивается i на один
во внешнем цикле for и i =5. Далее во внутреннем цикле for идёт сравнение 2<5?
(j=2, i=5), Да, меньше, выполняем if во внутреннем цикле, if дает ложь. Идёт переход
снова во внутренний цикл for, j увеличивается на 1 (j=3, i=5).
3<5? Да, снова выполняется условие if,
5/3 дает ложь, идет снова возврат во внутренний цикл for, (j=4, i=5),
Выполняется снова if, 5/4 дает ложь, снова возврат во внутренний цикл
(j=5, i=5) 5<5, Нет не меньше идёт переход во внешний
цикл for где выводится через document.write(i+"<br>");
результат на экран Имеем уже на данный момент 2,3, 5 на выводе.
<-------------------------------------------------------------------------------------------------->
4. i увеличивается на один во внешнем цикле for, i =6, Далее во внутреннем цикле for
идёт сравнение 2<6? (j=2, i=6) Да, 2 меньше 6 и выполняется условие if Во внутреннем
цикле. 6/2 дает остаток 0, идете переход к метке. Снова запускается внешний цикл for,
уже i=7. Во внутреннем цикле for Идёт сравнение 2<7, да. Условие иф дает ложь
при 7/2, происходит возврат во внутренний цикл for (j=3, i=7) Условие иф дает ложь
при 7/3, происходит возврат во внутренний цикл for (j=4, i=7) Условие иф дает ложь
при 7/4, происходит возврат во внутренний цикл for (j=5, i=7) , Условие иф дает ложь
при 7/5, происходит возврат во внутренний цикл for (j=6, i=7) Условие иф дает ложь
при 7/6, происходит возврат во внутренний цикл for (j=7, i=7). 7<7? Нет, Идет переход
во внешний цикл for в котором document.write выводит на экран цифру семь.
<-------------------------------------------------------------------------------------------------->
|
| Часовой пояс GMT +3, время: 22:20. |