Сколько ключей подойдёт к сундуку

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

Условие

В игре есть сундук с числом-замком X. К нему подходят все «ключи-числа» d, которые делят X без остатка.

Тебе нужно понять, сколько разных положительных ключей подойдёт к этому сундуку.

Формат ввода

Одно целое число X.

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

Выведите одно целое число — количество положительных делителей числа X.

Ограничения

Пример

Ввод:

12

Вывод:

6

(Подходят ключи 1, 2, 3, 4, 6, 12.)

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

Приём: Перебор делителей до корня (парные делители)

Ключевое наблюдение: делители числа идут парами. Если d делит X, то вместе с ним делит и число X//d. Один из пары обязательно не больше sqrt(X), а другой — не меньше. Значит, чтобы посчитать все делители, достаточно проверить только d от 1 до sqrt(X).

Почему это работает: если d > sqrt(X), то его «партнёр» X//d < sqrt(X), и мы уже найдём пару, когда дойдём до маленького делителя.

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

Мини-сниппет проверки пары: if X % d == 0: cnt += 1; if d*d != X: cnt += 1.

Сложность: O(sqrt(X)) по времени, что быстро для X до 1 000 000.

Частая ошибка: забыть про случай полного квадрата (например, X = 36): делитель 6 совпадает с парным 36//6, его нельзя считать дважды — именно для этого проверка d*d != X.

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

На сундуке стоит число 12. К нему подходят все положительные «ключи» d, которые делят 12 без остатка. Нужно понять, сколько таких разных ключей.

Идея: Перебирай делители не до самого числа, а только среди маленьких: если маленький делитель подходит, то сразу находится и его «парный» делитель. Так можно посчитать все делители парами; отдельный особый случай — когда делитель совпадает со своей парой (когда число является точным квадратом).

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

Куда дальше