Grade 9 · Divisibility and prime numbersCitește în română
Prime factorization
Original: Descompunerea în factori primi
The idea
We try the factors d = 2, 3, 4, ... and divide n by d as many times as possible, counting how many times (the exponent). A composite d no longer divides n, because its prime factors have already been removed. We stop when d * d > n; if n > 1 remains, it is one last prime factor with exponent 1. Each line shows the factor and its exponent.
Original description (Romanian)
Încercăm factorii d = 2, 3, 4, ... și împărțim n la d de câte ori se poate, numărând de câte ori (exponentul). Un d compus nu mai divide n, pentru că factorii lui primi au fost deja eliminați. Ne oprim când d * d > n; dacă a rămas n > 1, acesta este un ultim factor prim, cu exponentul 1. Se afișează pe fiecare linie factorul și exponentul.
- Complexity
- O(√n)
- Grade
- Grade 9 (Clasa a IX-a)
Examples
Input
360
Expected output
2 3 3 2 5 1
Input
26
Expected output
2 1 13 1
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Descompunerea în factori primi
* Clasa: 9
* Capitol: Divizibilitate și numere prime
* Descriere: Încercăm factorii d = 2, 3, 4, ... și împărțim n la d de câte ori
* se poate, numărând de câte ori (exponentul). Un d compus nu mai
* divide n, pentru că factorii lui primi au fost deja eliminați.
* Ne oprim când d * d > n; dacă a rămas n > 1, acesta este un
* ultim factor prim, cu exponentul 1.
* Se afișează pe fiecare linie factorul și exponentul.
* Complexitate: O(√n)
*
* Exemplu
* Intrare: 360
* Ieșire:
* 2 3
* 3 2
* 5 1
*
* Exemplu
* Intrare: 26
* Ieșire:
* 2 1
* 13 1
*/
#include <iostream>
using namespace std;
int main()
{
long long n;
cin >> n;
for (long long d = 2; d * d <= n; d++)
{
int exponent = 0;
while (n % d == 0)
{
n = n / d;
exponent++;
}
if (exponent > 0)
{
cout << d << ' ' << exponent << '\n';
}
}
if (n > 1)
{
cout << n << ' ' << 1 << '\n';
}
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.