0405 - Suma Cifre Nr Prime

De la Universitas MediaWiki

Cerinţa

Se dă un șir cu n numere naturale. Determinați suma tuturor cifrelor numerelor prime din șir.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieşire

Programul afișează pe ecran numărul S, reprezentând suma tuturor cifrelor numerelor prime din șir.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1.000.000.000.

Exemplu

Intrare
6

83 36 53 401 90 7

Ieșire
31

Explicație

Dintre cele 6 numere citite sunt prime : 83 53 401 7. Suma cifrelor acestor numere este 31.

Rezolvare

def validare_date(n: int, a: list) -> bool:
    if not 1 <= n <= 1000:
        return False
    for x in a:
        if not 1 <= x <= 10**6:
            return False
    return True

def prim(n: int) -> int:
    cnt = 0
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            cnt += 2
        if i*i == n:
            cnt -= 1
    if cnt == 2:
        return 1
    else:
        return 0

def sum(n: int) -> int:
    s = 0
    while n > 0:
        s += n % 10
        n //= 10
    return s

if __name__ == '__main__':
    n = int(input())
    a = list(map(int, input().split()))
    if validare_date(n, a):
        s = 0
        for x in a:
            if prim(x):
                s += sum(x)
        print(s)
    else:
        print("Datele de intrare nu corespund restrictiilor impuse.")

Explicație rezolvare

Acest cod conține trei funcții și un bloc de cod principal care folosește aceste funcții pentru a efectua o sarcină specifică:

1.Funcția validare_date primește un număr întreg n și o listă de numere întregi a și returnează True dacă valorile sunt conforme cu anumite restricții și False în caz contrar. În acest caz, valorile valide pentru n sunt între 1 și 1000, iar valorile valide pentru fiecare element din lista a sunt între 1 și 10^6.

2.Funcția prim primește un număr întreg n și returnează 1 dacă numărul este prim și 0 în caz contrar. În această funcție, se folosește o metodă de determinare a numărului de divizori ai lui n, și anume, se numără câți divizori există în intervalul [1, sqrt(n)]. Dacă numărul total de divizori este 2, atunci numărul este prim.

3.Funcția sum primește un număr întreg n și returnează suma cifrelor acestuia. Această funcție extrage cifrele din numărul dat prin împărțirea repetată la 10 și adună cifra obținută la suma totală.

4.Blocul de cod principal solicită introducerea numărului n și a listei a, validează datele introduse utilizând funcția validare_date, calculează suma cifrelor tuturor numerelor prime din lista a și o afișează. În cazul în care datele introduse nu sunt valide, se afișează un mesaj de eroare.