3333 - bookface

From Bitnami MediaWiki

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>

  1. 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.