@Romario5891

Как работают эти циклы?

Особенно не понимаю то, как работает вложенный цикл.
const n = 10
nextPrime: for (let i = 2; i <= n; i++) {
  for (let j = 2; j < i; j++) {
      if (i % j == 0) continue nextPrime
  }
  console.log(i)
}
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 2
Tom_Xor
@Tom_Xor
Материалы для чтения:

  1. Конструкция for (;;)
  2. Инструкция continue

Введение

Просто́е число́ — натуральное число, имеющее только два натуральных делителя — единицу и самого себя.

В настоящее время в математике принято не относить единицу ни к простым, ни к составным числам, так как это нарушает важную для теории чисел единственность разложения на простые множители.

То есть если число n это натуральное число, не являющееся 1, делящееся без остатка на 1 и на n и делящееся с остатком на все натуральные числа от 1 не включительно до n не включительно, то оно простое.

Заметка. Выражение «от 1 не включительно до n не включительно» предпочтительнее выражения «от 2 включительно до n - 1 включительно», так как второе выражение без дополнительных пояснений для числа 2 и числа 3 не совсем корректно.
Отредактированная версия цикла

const n = 10
number: for (let currentNumber = 2; currentNumber <= n; currentNumber++) { // 1, 2
  // 3, 4
  for (let devider = 2; devider < currentNumber; devider++) { // 5
    if (currentNumber % devider == 0) continue number // 6
  }
   console.log(currentNumber, 'is prime') // 7
}

Пояснения:

  1. Перебираем все натуральные числа от 2 включительно до 10 включительно.
  2. Так как 1 это не простое число, то не перебираем его, следовательно проверка на то, что currentNumber это не 1 избыточна.
  3. Проверка currentNumber на натуральность избыточна, так как в цикле перебираются только натуральные числа.
  4. Проверка currentNumber на делимость на 1 и на currentNumber без остатка избыточна, так как все натуральные числа делятся на 1 и на себя без остатка, а currentNumber это всегда натуральное число.
  5. Проверяем делится ли currentNumber на все натуральные числа от 1 не включительно до currentNumber не включительно с остатком.
  6. Если currentNumber делится хотя бы на одно натуральное число от 1 не включительно до currentNumber не включительно без остатка, то переходим к блоку завершения текущей итерации цикла с меткой number.
  7. Выводим в консоль сообщение о том, что число currentNumber – простое. Этот код выполнится только если текущая итерация цикла с меткой number не была прервана, то есть если число currentNumber прошло проверку на простоту.

Ответ написан
Ваш ответ на вопрос

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

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