2037 - Grea: Difference between revisions
Diana Butuza (talk | contribs) |
|||
Line 28: | Line 28: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare_date(T, A_list): | ||
for a in A_list: | for a in A_list: | ||
if a < 2 or a > 2000000000: | if a < 2 or a > 2000000000: | ||
return False | return False | ||
if T < 1 or T > 500: | if T < 1 or T > 500: | ||
return False | return False | ||
else: | else: | ||
return True | |||
def desc(n): | def desc(n): | ||
Line 59: | Line 56: | ||
A_list = [int(fin.readline().strip()) for _ in range(T)] | A_list = [int(fin.readline().strip()) for _ in range(T)] | ||
if not | if not validare_date(T, A_list): | ||
fout.write("Datele nu corespund restrictițiilor impuse.") | |||
exit() | exit() | ||
Line 65: | Line 63: | ||
for a in A_list: | for a in A_list: | ||
k = desc(a) | k = desc(a) | ||
fout.write("Datele sunt introduse corect.\n") | |||
fout.write(str(k) + '\n') | fout.write(str(k) + '\n') | ||
Revision as of 18:06, 9 April 2023
Enunț
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: (B1 + 1)(B2 + 1)...(BK + 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
Dacă datele sunt introduse corect, în fișier se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou 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. În cazul în care datele nu respectă restricțiile, se va afișa in fișier : "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări
- 1 ⩽ T ⩽ 500
- 2 ⩽ A ⩽ 2.000.000.000
Exemple
- grea.in
- 1
- 4
- grea.out
- Datele sunt introduse corect.
- 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
Rezolvare
<syntaxhighlight lang="python" line>
def validare_date(T, A_list):
for a in A_list: if a < 2 or a > 2000000000: return False if T < 1 or T > 500: return False else: return True
def desc(n):
cnt = 0 d = 2 while n > 1: p = 0 while n % d == 0: n //= d p += 1 cnt += p d += 1 if d * d > n: d = n return cnt
if __name__ == '__main__':
with open('grea.in', 'r') as fin: T = int(fin.readline().strip()) A_list = [int(fin.readline().strip()) for _ in range(T)]
if not validare_date(T, A_list): fout.write("Datele nu corespund restrictițiilor impuse.") exit()
with open('grea.out', 'w') as fout: for a in A_list: k = desc(a) fout.write("Datele sunt introduse corect.\n") fout.write(str(k) + '\n')
</syntaxhighlight>