Сколько ключей к шкафчику

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

Условие

В школе завхоз выдал новый шкафчик с номером N и говорит: «К нему подходит ровно столько ключей, сколько у числа N положительных делителей».

Помоги быстро понять, сколько таких ключей нужно.

Важно: N может быть больше 2^31, как на олимпиадах (влезает в 64-битный тип).

Формат ввода

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

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

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

Ограничения

Пример

Ввод:

12

Вывод:

6

Пояснение: делители 12 — это 1, 2, 3, 4, 6, 12.

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

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

Ключевое наблюдение: если d делит N, то вместе с ним существует парный делитель N//d. Один из них обязательно <= sqrt(N), второй >= sqrt(N). Значит, чтобы посчитать все делители, не нужно перебирать числа до N — хватает перебора до корня.

Почему это работает: делители «спариваются» вокруг sqrt(N). Для каждого найденного d мы сразу учитываем два делителя: d и N//d.

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

Сложность: O(sqrt(N)) проверок делимости; для N <= 1e12 это до 1e6 итераций — нормально за 1 секунду.

Частая ошибка: считать корень через int(N**0.5) и из-за погрешности пропустить случай, когда N — полный квадрат. Используй math.isqrt и отдельно обработай r*r == N.

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

Номер шкафчика N = 12. Количество подходящих ключей равно количеству положительных делителей числа 12 (чисел, на которые 12 делится без остатка).

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

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

Куда дальше