Позначимо через кількість дільників числа . Очевидно, що d(1) = 1.
Нехай — просте число. Тоді має два дільники: і . Отже, d(p) = 2.
Нехай n = p^k — степінь простого числа. Тоді має k + 1 дільників: 1, p, p_2, p_3, ..., p^k. Отже, d(p^k) = k + 1.
Нехай n = p^k q^l. Розглянемо дві множини: P = {1, p, p_2, p_3, ..., p_k} і Q = {1, q, q_2, q_3, ..., q_l}
Будь-який дільник числа p^k q^l можна представити у вигляді x \cdot y, де x \in P, y \in Q. Дільник з можна вибрати k + 1 способом, дільник з можна вибрати l + 1 способом. Відповідно, дільник d = x \cdot y можна скласти (k + 1) \cdot (l + 1) способами.
Розкладемо число на прості множники: n = p_1^{a_1}p_2^{a_2}...p_k^{a_k}. Кількість дільників числа дорівнює
Приклад
Число n = 18 має дільників: 1, 2, 3, 6, 9, 18.
Розкладемо число n = 18 на прості множники:
Отже
Віднімаємо два дільники ( і ), отримуємо відповідь: дільники.
Реалізація алгоритму
Функція CountDivisors розкладає число на прості множники і обчислює кількість його дільників .
int CountDivisors(int n)
{
int c, i, res = 1;
for(i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
c = 0;
while(n % i == 0)
{
n /= i;
c++;
}
res *= (c + 1);
}
}
if (n > 1) res *= 2;
return res;
}Основна частина програми. Читаємо вхідне значення .
scanf("%d",&n);Обчислюємо і виводимо відповідь. Із загальної кількості дільників віднімаємо два дільники: і саме число .
printf("%d\n",CountDivisors(n)-2);Python реалізація
import mathФункція CountDivisors розкладає число на прості множники і обчислює кількість його дільників .
def CountDivisors(n):
res = 1;
for i in range(2, int(math.sqrt(n)) + 1):
if (n % i == 0):
c = 0
while (n % i == 0):
n //= i
c += 1
res *= (c + 1);
if (n > 1): res *= 2;
return res;Основна частина програми. Читаємо вхідне значення .
n = int(input())Обчислюємо і виводимо відповідь. Із загальної кількості дільників віднімаємо два дільники: і саме число .
print(CountDivisors(n) - 2)