3333 - bookface
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):
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
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.