3333 - bookface

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

#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)

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.