0405 - Suma Cifre Nr Prime: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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.0...
 
No edit summary
 
Line 18: Line 18:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def is_prime(n):
def validare_date(n: int, a: list) -> bool:
    """Verifică dacă un număr este prim."""
     if not 1 <= n <= 1000:
     if n < 2:
         return False
         return False
     for i in range(2, int(n ** 0.5) + 1):
     for x in a:
         if n % i == 0:
         if not 1 <= x <= 10**6:
             return False
             return False
     return True
     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 validare_date(lista):
def sum(n: int) -> int:
     """Verifică dacă toate elementele din lista sunt numere naturale."""
     s = 0
     for numar in lista:
     while n > 0:
         if numar < 0:
         s += n % 10
            return False
        n //= 10
     return True
     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.")


n = int(input("Introduceți numărul de elemente din șir: "))
 
lista_numere = []
for i in range(n):
    numar = int(input("Introduceți numărul: "))
    lista_numere.append(numar)


if not validare_date(lista_numere):
</syntaxhighlight>
    print("Datele introduse nu sunt valide.")
==Explicație rezolvare==
else:
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ă:
    suma_cifre_prime = 0
 
    for numar in lista_numere:
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.
        if is_prime(numar):
            cifre = [int(cifra) for cifra in str(numar)]
            suma_cifre_prime += sum(cifre)


    print("Suma cifrelor numerelor prime din șir este:", suma_cifre_prime)
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ă.


</syntaxhighlight>
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.

Latest revision as of 19:08, 9 April 2023

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.