1903 - V Terminal

De la Universitas MediaWiki

Enunț

Andrei a făcut într-o zi un șir de N numere. În a doua zi a lăsat în acel șir doar numerele prime. În a treia zi a calculat pentru fiecare număr rămas în șir suma cifrelor, iar apoi a adunat toate aceste sume în S. După ce a obținut numărul S a început să adune toate cifrele din care este format S și tot așa până când ajunge la o cifră terminală C.

Cerința

Ajutați-l pe Andrei să calculeze cifra terminală C.

Date de intrare

Fișierul de intrare vterminalin.txt conține pe prima linie numărul N, iar pe a doua linie N numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire vterminalout.txt va conține pe prima linie numărul C, reprezentând valoarea cerută.

Restricții și precizări

  • 1 ⩽ N ⩽ 10.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000

Exemplul 1

Intrare
vterminalin.txt
5
4 11 24 13 97
Ieșire
Datele de intrare corespund restricțiilor impuse
vterminalout.txt
4

Explicație

Doar 11, 13 și 97 sunt prime, deci 11 + 13 + 97 = 121
1 + 2 + 1 = 4, deci 4 este cifra terminală

Exemplu 2

Intrare
vterminalin.txt
105
4 11 24 13 97
Ieșire
Datele de intrare NU corespund restricțiilor impuse

Rezolvare

#1903 - V Terminal

def este_prim(numar):
    if numar < 2:
        return False
    for i in range(2, int(numar ** 0.5) + 1):
        if numar % i == 0:
            return False
    return True


def suma_cifrelor(numar):
    return sum(int(cifra) for cifra in str(numar))


def cifra_terminala(numar):
    while numar >= 10:
        numar = suma_cifrelor(numar)
    return numar


def main():
    with open("vterminalin.txt", "r") as fisier:
        n = int(fisier.readline().strip())
        numere = list(map(int, fisier.readline().split()))

    if 1 <= n <= 100:
        print("Datele de intrare corespund restricțiilor impuse")
    else:
        print("Datele de intrare NU corespund restricțiilor impuse")

    for numar in numere:
        if not (numar < 1000):
            print("Datele de intrare NU corespund restricțiilor impuse")
            exit(0)

    numere_prime = [num for num in numere if este_prim(num)]
    suma_cifrelor_prime = sum(suma_cifrelor(num) for num in numere_prime)
    rezultat = cifra_terminala(suma_cifrelor_prime)

    with open("vterminalout.txt", "w") as fisier_out:
        fisier_out.write(str(rezultat))


if __name__ == "__main__":
    main()