Условие задачи
Вывести представление целого числа [latex] n [/latex] в виде произведения простых чисел.
Входные данные
Единственное число [latex] n [/latex] [latex] (2 ≤ n ≤ 2^{31} — 1). [/latex]
Выходные данные
Вывести список простых множителей в порядке не убывания, разделённых знаком [latex] «*» [/latex] .
Тесты
Входные данные | Выходные данные |
[latex]30[/latex] | [latex]2*3*5[/latex] |
[latex]16[/latex] | [latex]2*2*2*2[/latex] |
[latex]5[/latex] | [latex]5[/latex] |
[latex]12[/latex] | [latex]2*2*3[/latex] |
[latex]7[/latex] | [latex]7[/latex] |
[latex]144[/latex] | [latex]2*2*2*2*3*3[/latex] |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { long long numb, divisor = 2; cin >> numb; while (divisor*divisor <= numb) { if (numb%divisor == 0) { cout << divisor; numb = numb / divisor; cout << '*'; } else if (divisor == 2) divisor = 3; else divisor = divisor + 2; } cout << numb; return 0; } |
Решение задачи
Пока наше число больше либо равно
divisor*divisor выполняется:
- Если numb делится нацело на divisor, мы выводим наш делитель, следовательно numb делится на divisor;
- В противном случае:
- Если divisor равен $2$, то присваиваем ему значение $3$ и повторяем;
- В другом случае увеличиваем его на $2$;
Таким образом перебираются $2,3$ и $5$, которые являются делителем для всех чисел.
Ссылки
Игорь Евгеньевич, исправил. Теперь вместо 3-х циклов всего 1.
Хорошо, только соедините 11 и 113ю строку в одной команде печати.
У меня тоже похоже получалось: