Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.
Acesta vă dă T
numere naturale. Pentru fiecare număr A
trebuie să găsiți cel mai mare K
cu proprietatea că există un șir B
de numere naturale nenule, nu neapărat distincte, astfel încât: (B
1
+ 1)(B
2
+ 1)...(B
K
+ 1) = A
Cerința
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul K
cerut într-un timp cât mai scurt, pentru fiecare din cele T
numere.
Date de intrare
Fișierul grea.in
va conţine pe prima linie numărul natural T
, reprezentând numărul de valori date. Urmează apoi T
linii. Pe fiecare linie va exista un număr A
, numărul dat de Arpsod.
Date de ieșire
Fișierul grea.out
, va conţine T
linii. Pe fiecare linie va exista un număr K
, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.
Restricții și precizări
1 ≤ T ≤ 500
2 ≤ A ≤ 2.000.000.000
Exemplu
grea.in
1 4
grea.out
2
Explicație
Ne interesează rezultatul pentru un număr (4)
Şirul are 2
termeni: 1
şi 1 (1 + 1)(1 + 1) = 2 * 2 = 4
#include <bits/stdc++.h> using namespace std; ifstream cin("grea.in"); ofstream cout("grea.out"); int desc(int n) { int cnt=0; int d=2; while(n>1) { int p = 0; while(n%d==0) { n/=d; p++; } cnt+=p; d++; if(d*d>n) d=n; } return cnt; } int main() { int n; cin >> n; int x; for(int i = 0 ; i < n ; ++i) { cin >> x; cout << desc(x) << endl; } }