Сколько ключей подойдёт к сундуку
Условие
В игре есть сундук с числом-замком X. К нему подходят все «ключи-числа» d, которые делят X без остатка.
Тебе нужно понять, сколько разных положительных ключей подойдёт к этому сундуку.
Формат ввода
Одно целое число X.
Формат вывода
Выведите одно целое число — количество положительных делителей числа X.
Ограничения
- 1 ≤ X ≤ 1 000 000
Пример
Ввод:
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), и мы уже найдём пару, когда дойдём до маленького делителя.
План решения:
- Считать
X. - Завести счётчик
cnt = 0. - Для
dот 1, покаd*d <= X: - Если
X % d == 0, то найден делительd, увеличиваемcnt. - Посчитать парный делитель
p = X//d. Еслиp != d, то это другой делитель, увеличиваемcntещё раз. - Вывести
cnt.
Мини-сниппет проверки пары: 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 без остатка. Нужно понять, сколько таких разных ключей.
- Отметь на ленте от 1 до 12 все числа, которые делят 12 без остатка (то есть 12 % d = 0).
- Теперь отметь только «маленькие делители» 12 на ленте от 1 до 3. (Почему до 3? Потому что 3×3=9 ещё не больше 12, а 4×4=16 уже больше.)
- Посчитай количество делителей 12 через пары. Для каждого маленького делителя (1, 2, 3) добавь 2 (сам делитель и его пара). Сколько получится всего?
Идея: Перебирай делители не до самого числа, а только среди маленьких: если маленький делитель подходит, то сразу находится и его «парный» делитель. Так можно посчитать все делители парами; отдельный особый случай — когда делитель совпадает со своей парой (когда число является точным квадратом).
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- БВИ по олимпиадам: в какие вузы берут — правила приёма вузов, разобранные построчно, со ссылкой на приказ у каждой строки
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам