0405 - Suma Cifre Nr Prime

From Bitnami MediaWiki

Cerinţa[edit | edit source]

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

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

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

Restricții și precizări[edit | edit source]

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

Exemplu[edit | edit source]

Intrare
6

83 36 53 401 90 7

Ieșire
31

Explicație[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> 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.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

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.