3333 - bookface

De la Universitas 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

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