Проверка на простоту для школьного номера
Условие
В школе каждому участнику кружка выдали «секретный номер» — одно целое число. Учитель сказал: если номер простой, то ученик проходит в команду на турнир.
Номер называют простым, если у него ровно два различных делителя: 1 и он сам.
Формат ввода
В одной строке записано целое число x.
Формат вывода
Выведите YES, если число x простое, иначе выведите NO.
Ограничения
2 ≤ x ≤ 1 000 000- Время: 1 секунда, память: 256 МБ.
Пример
Ввод:
29
Вывод:
YESКак решать — идея подхода
Приём: Проверка делителей до квадратного корня
Ключевое наблюдение: если число x составное, то у него есть делитель d, не превышающий sqrt(x). Почему так? Делители идут парами: если d * k = x и d > sqrt(x), то второй делитель k < sqrt(x). Значит, чтобы поймать составность, достаточно проверить только маленькие делители.
Это позволяет заменить «проверить все числа до x» на быстрый перебор до sqrt(x), что легко укладывается в ограничения до 1 000 000.
План решения:
- Считать x.
- Перебрать d от 2 до
isqrt(x)включительно. - Если
x % d == 0, то найден нетривиальный делитель → вывестиNO. - Если перебор закончился без делителей → вывести
YES.
Мини-сниппет условия проверки:
if x % d == 0: ...
Сложность: O(sqrt(x)) по времени, для x = 1 000 000 это примерно 1000 проверок; память O(1).
Частая ошибка: неправильно выбрать границу цикла. Нужно проверять d до целого квадратного корня включительно (например, для x = 49 важно проверить d = 7), иначе квадраты простых могут ошибочно считаться простыми.
Разберись руками
У тебя секретный номер 29. Нужно понять, простой он или нет: то есть есть ли у него делители кроме 1 и самого числа. Разберём это на 29 руками, без кода.
- Отметь на ленте от 1 до 29 ВСЕ делители числа 29 (делитель — это число, на которое 29 делится без остатка).
- Чтобы не проверять все числа подряд, найди целую часть квадратного корня из 29. Какое это число? (То есть какое наибольшее целое число, квадрат которого не превышает 29.)
- Теперь отметь среди чисел 2..5 те, которые делят 29 без остатка.
Идея: Чтобы проверить простоту числа, ищем у него делители кроме 1 и самого числа. Для этого достаточно проверять делимость на подряд идущие числа, начиная с 2 и до целого корня из этого числа: если среди них нашёлся делитель — число составное, если нет — простое.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать