1903 - V Terminal

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.

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