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... |
No edit summary |
||
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 , n): | |||
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 , n) | |||
</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. |
Revision as of 13:16, 8 April 2023
Sursa: - 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 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
- 1 ≤ n ≤ 50.000
- cele n numere date sunt nenule, mai mici decât 1.000.000
Exemple
Exemplul 1
- bookface.in
- 3
- 2 4 3
- Ieșire
- Datele sunt corecte.
- bookface.out
- 7
- 31
- 13
Exemplul 2
- bookface.in
- 2
- 5 3
- Ieșire
- Datele sunt corecte.
- bookface.out
- 31
- 13
Exemplul 3
- bookface.in
- 2
- 314441 41241241
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 3333 - bookface
def bookface(vector , n):
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 , n)
</syntaxhighlight>
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.