Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функции. Выведение простых чисел. Не понимаю код. (https://javascript.ru/forum/misc/84846-funkcii-vyvedenie-prostykh-chisel-ne-ponimayu-kod.html)

aktiom 14.01.2023 17:38

Функции. Выведение простых чисел. Не понимаю код.
 
Почему при n=10 первый alert выведет 2? Ведь остаток от деления 2 на 2 равен нулю (во внутреннем цикле), а значит 2 не должно выводиться, хоть оно и простое, да и вообще это же не соответствует условию, т.к. 2 не меньше 2! Я что-то застрял на этом, не понимаю, как же так, помогите гуманитарию.

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,3,5,7


И сразу второй вопрос. Вот другой вариант, который использует дополнительную функцию isPrime(n) для проверки на простое. Но он вообще никак не поддается моему пониманию. Изучаю JS меньше месяца, до этого так сильно не застревал. Все пройденное переосмысливал, перечитывал, гуглил свой вопрос, но ничего не помогло. Кто-нибудь мудрый и терпеливый, объясните мне это, пожалуйста, на пальцах!

function showPrimes(n) {

  for (let i = 2; i < n; i++) {
    if (!isPrime(i)) continue;

    alert(i);  // простое
  }
}

function isPrime(n) {
  for (let i = 2; i < n; i++) {
    if ( n % i == 0) return false;
  }
  return true;
}

showPrimes(10) //2,3,5,7

рони 14.01.2023 17:42

aktiom,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 14.01.2023 17:45

Цитата:

Сообщение от aktiom
первый alert выведет 2? В

потому что второй цикл не сработает от слова совсем, for (let j = 2; j < i; j++)

ksa 14.01.2023 20:00

Цитата:

Сообщение от aktiom
Выведение простых чисел
...
Почему при n=10 первый alert выведет 2? Ведь остаток от деления 2 на 2 равен нулю, а значит 2 не должно выводиться, да и вообще это же не соответствует условию, т.к. 2 не меньше 2!

Видно ты совсем не понимаешь что такое "простые числа"... :(
Цитата:

Просто́е число́ — натуральное число, имеющее ровно два различных натуральных делителя. Другими словами, натуральное число p является простым, если оно отлично от 1 и делится без остатка только на 1 и на само p
https://ru.wikipedia.org/wiki/Простое_число

Т.е. 2 это таки простое число. ;)

aktiom 15.01.2023 14:05

Цитата:

Сообщение от ksa (Сообщение 549978)
Видно ты совсем не понимаешь что такое "простые числа"... :(

https://ru.wikipedia.org/wiki/Простое_число

Т.е. 2 это таки простое число. ;)

Ошибаетесь, прекрасно понимаю, что такое простые числа)) Запотык был в другом, но с этой частью вопроса я уже разобрался. Осталась вторая часть, где функция внутри функции... всё ещё ищу ответ.

voraa 15.01.2023 14:17

Программируя на js надо уметь пользоваться отладчиком. Есть в средствах разработчика любого браузера.
Без него, никак нельзя. Чем раньше освоите, тем меньше глупых вопросов задавать будете.
Осваивайте и проходите пошагово свой код.

i = 2;
for (let j = 2; j < i; j++) {
   if (i % j == 0) continue nextPrime;
}

Что будет делать этот цикл?


Часовой пояс GMT +3, время: 23:56.