Проверка на простоту для школьного номера

тема: Теория чисел (НОД, НОК, остатки) · уровень: базовый

Условие

В школе каждому участнику кружка выдали «секретный номер» — одно целое число. Учитель сказал: если номер простой, то ученик проходит в команду на турнир.

Номер называют простым, если у него ровно два различных делителя: 1 и он сам.

Формат ввода

В одной строке записано целое число x.

Формат вывода

Выведите YES, если число x простое, иначе выведите NO.

Ограничения

Пример

Ввод:

29

Вывод:

YES

Как решать — идея подхода

Приём: Проверка делителей до квадратного корня

Ключевое наблюдение: если число x составное, то у него есть делитель d, не превышающий sqrt(x). Почему так? Делители идут парами: если d * k = x и d > sqrt(x), то второй делитель k < sqrt(x). Значит, чтобы поймать составность, достаточно проверить только маленькие делители.

Это позволяет заменить «проверить все числа до x» на быстрый перебор до sqrt(x), что легко укладывается в ограничения до 1 000 000.

План решения:

Мини-сниппет условия проверки:

Сложность: O(sqrt(x)) по времени, для x = 1 000 000 это примерно 1000 проверок; память O(1).

Частая ошибка: неправильно выбрать границу цикла. Нужно проверять d до целого квадратного корня включительно (например, для x = 49 важно проверить d = 7), иначе квадраты простых могут ошибочно считаться простыми.

Разберись руками

У тебя секретный номер 29. Нужно понять, простой он или нет: то есть есть ли у него делители кроме 1 и самого числа. Разберём это на 29 руками, без кода.

Идея: Чтобы проверить простоту числа, ищем у него делители кроме 1 и самого числа. Для этого достаточно проверять делимость на подряд идущие числа, начиная с 2 и до целого корня из этого числа: если среди них нашёлся делитель — число составное, если нет — простое.

Решить задачу с автопроверкой на Python →

Куда дальше