Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2023, 17:38
Новичок на форуме
Отправить личное сообщение для aktiom Посмотреть профиль Найти все сообщения от aktiom
 
Регистрация: 14.01.2023
Сообщений: 2

Функции. Выведение простых чисел. Не понимаю код.
Почему при 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

Последний раз редактировалось aktiom, 15.01.2023 в 15:40.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2023, 17:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

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

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

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2023, 17:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от aktiom
первый alert выведет 2? В
потому что второй цикл не сработает от слова совсем, for (let j = 2; j < i; j++)
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2023, 20:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от aktiom
Выведение простых чисел
...
Почему при n=10 первый alert выведет 2? Ведь остаток от деления 2 на 2 равен нулю, а значит 2 не должно выводиться, да и вообще это же не соответствует условию, т.к. 2 не меньше 2!
Видно ты совсем не понимаешь что такое "простые числа"...
Цитата:
Просто́е число́ — натуральное число, имеющее ровно два различных натуральных делителя. Другими словами, натуральное число p является простым, если оно отлично от 1 и делится без остатка только на 1 и на само p
https://ru.wikipedia.org/wiki/Простое_число

Т.е. 2 это таки простое число.
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2023, 14:05
Новичок на форуме
Отправить личное сообщение для aktiom Посмотреть профиль Найти все сообщения от aktiom
 
Регистрация: 14.01.2023
Сообщений: 2

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

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

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

Последний раз редактировалось aktiom, 15.01.2023 в 14:20.
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2023, 14:17
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

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

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

Что будет делать этот цикл?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить код js-скрипта, находящегося в файле на сервере RomanA Общие вопросы Javascript 4 04.04.2012 09:53
Не понимаю код, строчку... АrnowtАА Общие вопросы Javascript 8 13.05.2011 18:45
jQ, понимаю код melky Общие вопросы Javascript 1 13.04.2011 11:08
Вывести код функции UpJump Общие вопросы Javascript 1 09.01.2011 15:08
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03