3333 - bookface: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 43: Line 43:
#3333 - bookface
#3333 - bookface


def bookface(vector , n):
def bookface(vector):
     f = open("bookface.out", "w")
     f = open("bookface.out", "w")
     for a in vector:
     for a in vector:
Line 73: Line 73:
if __name__ == '__main__':
if __name__ == '__main__':
     vector , n = conform_restrictiilor()
     vector , n = conform_restrictiilor()
     bookface(vector , n)
     bookface(vector)


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 15:19, 8 April 2023

Sursa: - bookface


Cerinţa[edit]

Se dau n numere naturale nenule. Pentru fiecare număr dat a să se calculeze suma divizorilor lui a^2.

Date de intrare[edit]

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]

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]

  • 1 ≤ n ≤ 50.000
  • cele n numere date sunt nenule, mai mici decât 1.000.000

Exemple[edit]

Exemplul 1[edit]

bookface.in
3
2 4 3
Ieșire
Datele sunt corecte.
bookface.out
7
31
13

Exemplul 2[edit]

bookface.in
2
5 3
Ieșire
Datele sunt corecte.
bookface.out
31
13

Exemplul 3[edit]

bookface.in
2
314441 41241241
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare[edit]

<syntaxhighlight lang="python" line>

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

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.