У задачі потрібно розкласти число на прості множники, тобто подати його у вигляді n = p_1^{a_1} \cdot p_2^{a_2} \cdot ... \cdot p_k^{a_k}, де p_1 < p_2 < ... < p_k — прості числа. Кожен простий дільник p_i виводиться разом зі своїм степенем a_i, якщо a_i > 1.
Будемо перебирати можливі дільники у порядку зростання, починаючи з . Якщо ділить , то ділимо на доти, доки ділення виконується націло, і підраховуємо кількість ділень . Отримане значення і є степенем, з яким входить до розкладу. Після цього виводимо , якщо c = 1, або i^c, якщо c > 1.
Перебір дільників достатньо вести до \sqrt{n}. Якщо у числа немає дільників у проміжку від до \sqrt{n}, то це число просте. Тому після завершення циклу поточне значення або дорівнює , або є простим числом — останнім множником розкладу, який також потрібно вивести. Такий "великий" множник може бути лише один: добуток двох множників, більших за \sqrt{n}, перевищує .
Приклад. Розглянемо n = 3240.
i = 2: 3240 \to 1620 \to 810 \to 405, c = 3. Виводимо 2^3*, оскільки n = 405 > 1.
i = 3: 405 \to 135 \to 45 \to 15 \to 5, c = 4. Виводимо 3^4*, оскільки n = 5 > 1.
i = 4: 4 \cdot 4 > 5, цикл завершується.
Залишок n = 5 > 1 є простим множником, виводимо .
Відповідь: 2^3*3^4*5.
Реалізація алгоритму
Функція factor виконує розклад числа на прості множники.
void factor(int n)
{
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i) continue;Число є дільником . У змінній підрахуємо степінь, з яким воно входить до розкладу .
int c = 0;
while (n % i == 0) n /= i, c++;Виводимо множник i^c. Якщо степінь множника c = 1, виводимо лише . В іншому випадку виводимо множник з його степенем.
if (c > 1) printf("%d^%d",i,c); else printf("%d",i);Якщо число ще не розкладено повністю (n > 1), виводимо знак множення.
if (n > 1) printf("*");
}Якщо після завершення циклу значення більше за , то воно є простим.
if (n > 1) printf("%d",n);
printf("\n");
}Основна частина програми. Читаємо вхідне число і запускаємо його факторизацію.
scanf("%d",&n);
factor(n);Python реалізація
import mathФункція factor виконує розклад числа на прості множники.
def factor(n):
for i in range(2, math.isqrt(n) + 1):
if n % i: continueЧисло є дільником . У змінній підрахуємо степінь, з яким воно входить до розкладу .
c = 0
while n % i == 0:
n //= i
c += 1Виводимо множник i^c. Якщо степінь множника c = 1, виводимо лише . В іншому випадку виводимо множник з його степенем.
if c > 1: print(i,"^",c, sep = "", end="")
else: print(i, end="")Якщо число ще не розкладено повністю (n > 1), виводимо знак множення.
if n > 1: print("*", end="")Якщо після завершення циклу значення більше за , то воно є простим.
if n > 1: print(n)
else: print()Основна частина програми. Читаємо вхідне число і запускаємо його факторизацію.
n = int(input())
factor(n)