3333 - bookface: Difference between revisions

From Bitnami MediaWiki
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
 
(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]

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.