3333 - bookface: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3333/bookface - bookface] ---- == Cerinţa == Se dau '''n''' numere naturale nenule. Pentru fiecare număr dat '''a''' să se calculeze suma divizorilor lui '''a^2'''. == Date de intrare == Fișierul de intrare '''bookface.in''' conține pe prima linie numărul '''n''', iar pe a doua linie cele '''n''' numere naturale. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in f... |
Nagy Lenard (talk | contribs) No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 11: | Line 11: | ||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
* 1 ≤ '''n''' ≤ 50.000 | * 1 ≤ '''n''' ≤ 50.000 | ||
* cele '''n'' numere date sunt nenule, mai mici decât '''1.000.000''' | * cele '''n''' numere date sunt nenule, mai mici decât '''1.000.000''' | ||
== Exemple == | == Exemple == | ||
===Exemplul 1=== | ===Exemplul 1=== | ||
Line 41: | Line 41: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#3333 - bookface | |||
def bookface(vector): | |||
f = open("bookface.out", "w") | |||
for a in vector: | |||
patrat = a ** 2 | |||
s_divizori = 0 | |||
for i in range(1, int(patrat**0.5) + 1): | |||
if patrat % i == 0: | |||
s_divizori += i | |||
if i != patrat // i: | |||
s_divizori += patrat // i | |||
f.write(str(s_divizori) + "\n") | |||
def conform_restrictiilor(): | |||
with open("bookface.in", "r") as f: | |||
n = int(f.readline().strip()) | |||
vector = list(map(int, f.readline().strip().split())) | |||
if n < 1 or n > 50000: | |||
print("Datele nu sunt comform restricțiilor impuse.") | |||
exit() | |||
for a in vector: | |||
if a > 1000000: | |||
print("Datele nu sunt comform restricțiilor impuse.") | |||
exit() | |||
print("Datele sunt corecte.") | |||
return vector , n | |||
if __name__ == '__main__': | |||
vector , n = conform_restrictiilor() | |||
bookface(vector) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicaţie cod== | ==Explicaţie cod== | ||
Funcția '''conform_restrictiilor''' citește datele de intrare din fișierul "bookface.in", verifică dacă acestea respectă restricțiile impuse (n trebuie să fie între '''1''' și '''50000''', iar numerele date trebuie să fie mai mici decât '''1000000'''), și returnează lista '''vector''' cu numerele date și valoarea '''n'''. | |||
Funcția '''bookface''' primește lista '''vector''' și valoarea '''n''' returnate de funcția '''conform_restrictiilor'''. Pentru fiecare număr '''a''' din lista, calculează suma divizorilor lui '''a la pătrat'''. Rezultatele sunt apoi scrise în fișierul "bookface.out". | |||
În programul principal, se apelează funcția '''conform_restrictiilor''' pentru a obține datele de intrare verificate și apoi se apelează funcția '''bookface''' pentru a calcula și scrie rezultatele în fișierul de ieșire. |
Latest revision as of 15:19, 8 April 2023
Sursa: - bookface
Cerinţa[edit | edit source]
Se dau n numere naturale nenule. Pentru fiecare număr dat a să se calculeze suma divizorilor lui a^2.
Date de intrare[edit | edit source]
Fișierul de intrare bookface.in conține pe prima linie numărul n, iar pe a doua linie cele n numere naturale.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fișierul de ieșire bookface.out va conține pe linia i suma cerută pentru cel de-al i-lea număr. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 50.000
- cele n numere date sunt nenule, mai mici decât 1.000.000
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- bookface.in
- 3
- 2 4 3
- Ieșire
- Datele sunt corecte.
- bookface.out
- 7
- 31
- 13
Exemplul 2[edit | edit source]
- bookface.in
- 2
- 5 3
- Ieșire
- Datele sunt corecte.
- bookface.out
- 31
- 13
Exemplul 3[edit | edit source]
- bookface.in
- 2
- 314441 41241241
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3333 - bookface
def bookface(vector):
f = open("bookface.out", "w") for a in vector: patrat = a ** 2 s_divizori = 0 for i in range(1, int(patrat**0.5) + 1): if patrat % i == 0: s_divizori += i if i != patrat // i: s_divizori += patrat // i f.write(str(s_divizori) + "\n")
def conform_restrictiilor():
with open("bookface.in", "r") as f: n = int(f.readline().strip()) vector = list(map(int, f.readline().strip().split())) if n < 1 or n > 50000: print("Datele nu sunt comform restricțiilor impuse.") exit() for a in vector: if a > 1000000: print("Datele nu sunt comform restricțiilor impuse.") exit() print("Datele sunt corecte.") return vector , n
if __name__ == '__main__':
vector , n = conform_restrictiilor() bookface(vector)
</syntaxhighlight>
Explicaţie cod[edit | edit source]
Funcția conform_restrictiilor citește datele de intrare din fișierul "bookface.in", verifică dacă acestea respectă restricțiile impuse (n trebuie să fie între 1 și 50000, iar numerele date trebuie să fie mai mici decât 1000000), și returnează lista vector cu numerele date și valoarea n.
Funcția bookface primește lista vector și valoarea n returnate de funcția conform_restrictiilor. Pentru fiecare număr a din lista, calculează suma divizorilor lui a la pătrat. Rezultatele sunt apoi scrise în fișierul "bookface.out".
În programul principal, se apelează funcția conform_restrictiilor pentru a obține datele de intrare verificate și apoi se apelează funcția bookface pentru a calcula și scrie rezultatele în fișierul de ieșire.