В начале каждого
урока учительница математики Гузель Закиевна пишет на доске натуральное
число n. Пока идет урок, школьники
стараются найти как можно больше простых делителей этого числа. В конце урока
щедрая Гузель Закиевна награждает конфеткой всех, кто нашел максимальное
количество простых делителей.
Школьник Вася
очень любит сладкое и просит вас помочь ему получить конфетку от Гузель
Закиевны. Для заданного числа n выведите все его простые делители и
степени, в которых они встречаются в числе.
Вход. Одно натуральное число n (n ≤ 109).
Выход. Выведите все простые делители числа n в порядке
возрастания. Для каждого делителя укажите степень, в которой он встречается в
числе n, если эта степень больше единицы. Формат вывода должен
соответствовать примеру.
Пример
входа |
Пример
выхода |
3240 |
2^3*3^4*5 |
разложение
на множители
Анализ алгоритма
В задаче
необходимо разложить на множители число n.
Для этого переберем все его возможные простые делители от 2 до . Для каждого делителя подсчитаем, сколько раз он входит в n.
Реализация алгоритма
Функция factor выполняет разложение числа n на простые
множители.
void factor(int
n)
{
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i) continue;
Число i
является делителем n. В переменной c
подсчитаем степень, с которой оно входит в разложение n.
int c = 0;
while (n %
i == 0) n /= i, c++;
Выводим множитель ic.
Если степень множителя c = 1, выводим только i. В противном
случае выводим множитель i с его степенью.
if (c >
1) printf("%d^%d",i,c); else printf("%d",i);
Если число n еще
не разложено полностью (n > 1),
выводим знак умножения.
if (n >
1) printf("*");
}
Если после завершения цикла значение n больше 1, то оно является
простым.
if (n > 1)
printf("%d",n);
printf("\n");
}
Основная часть
программы. Читаем входное число n и запускаем его факторизацию.
scanf("%d",&n);
factor(n);
Python реализация
import math
Функция factor выполняет разложение числа n на простые
множители.
def factor(n):
for i in range(2, math.isqrt(n)
+ 1):
if n % i: continue
Число
i является делителем n. В
переменной c подсчитаем степень, с которой оно входит в разложение n.
c = 0
while n % i == 0:
n //= i
c += 1
Выводим множитель ic. Если степень множителя c = 1, выводим только i. В противном случае выводим множитель i
с его степенью.
if c > 1: print(i,"^",c, sep = "", end="")
else: print(i, end="")
Если
число n еще не разложено полностью (n > 1), выводим знак умножения.
if n > 1: print("*", end="")
Если после завершения
цикла
значение n больше 1, то оно является простым.
if n > 1: print(n)
else: print()
Основная часть программы. Читаем входное число n и
запускаем его факторизацию.
n = int(input())
factor(n)