2862.
Количество делителей
Найти количество
делителей числа n.
Вход. Одно натуральное число n (n < 10000).
Выход. Количество делителей числа n.
Пример
входа |
Пример
выхода |
12 |
6 |
РЕШЕНИЕ
теория чисел – количество делителей
Если n = , то количество его делителей равно
d(n) = (a1 + 1) * (a2
+ 1) * … * (ak + 1)
Функция CountDivisors вычисляет количество делителей числа n.
int CountDivisors(int n)
{
int c, i, res = 1;
for(i = 2; i <= (int)sqrt(1.0*n);
i++)
{
if (n % i == 0)
{
Если i – простой
делитель числа n, то подсчитываем
сколько раз он входит в n в
переменной c.
c = 0;
while(n % i == 0)
{
n /= i; c++;
}
res *= (c + 1);
}
}
Если n > 1, то n содержит простой делитель.
if (n > 1) res *= 2;
return res;
}
Основная часть программы. Читаем входное значение n и выводим количество его делителей.
scanf("%d",&n);
printf("%d\n",CountDivisors(n));
Java реализация
import
java.util.*;
public class Main
{
public static int CountDivisors(int n)
{
int c, res = 1;
for(int 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;
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int res = CountDivisors(n);
System.out.println(res);
}
}
Python реализация
def CountDivisors(n):
res =
1
for i in range(2, 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())
res = CountDivisors(n)
print(res)