Аналіз алгоритму
Позначимо через кількість дільників числа . Очевидно, що .
Нехай – просте число. Тоді має два дільники: 1 та . Отже .
Нехай – ступінь простого числа. Тоді має дільник: 1, , , , …, . Значить .
Нехай . Розглянемо дві множини:
та
Будь-який дільник числа можна представити у вигляді , де . Дільник з можна вибрати способом, дільник з можна вибрати способом. Отже дільник можна скласти способами.
Розкладемо число на прості множники: . Кількість дільників числа дорівнює
Приклад
Число має 6 дільників: 1, 2, 3, 6, 9, 18.
Розкладемо число на прості множники:
Отже
Віднімаємо два дільники (1 і 18), отримуємо відповідь: 4 дільники.
Реалізація алгоритму
Функція 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);
Обчислюємо та виводимо відповідь. З загальної кількості дільників віднімаємо два дільники: 1 та саме число .
printf("%d\n",CountDivisors(n)-2);
Python реалізація
import math 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)