0406 - Sum Cif Prim: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Se dă un șir cu '''n''' numere naturale. Determinați câte dintre ele sunt prime și au suma cifrelor un număr prim. == 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 '''C''', reprezentând rezultatul cerut. == Restricții și precizări == * '''1 ≤ n ≤ 1000''' *cele '''n''' numere citite vor fi mai mici decât '''1.000.000.000''' ==...)
 
Fără descriere a modificării
 
Linia 18: Linia 18:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def is_prime(num):
def is_prime(n):
    """Verifică dacă un număr este prim."""
     if n < 2:
     if num < 2:
         return False
         return False
     for i in range(2, int(num ** 0.5) + 1):
     for i in range(2, int(n ** 0.5) + 1):
         if num % i == 0:
         if n % i == 0:
             return False
             return False
     return True
     return True


def sum_digits(n):
    return sum(int(d) for d in str(n))


def digit_sum(num):
def validare_date(n, nums):
     """Calculează suma cifrelor unui număr."""
     if n < 1 or n > 1000:
    return sum(int(digit) for digit in str(num))
         return False
 
     for num in nums:
 
         if num < 1 or num > 1000000000:
# Validare date de intrare
             return False
while True:
     return True
    try:
        n = int(input("Introduceți numărul de elemente: "))
        if n < 1 or n > 1000:
            raise ValueError("Numărul de elemente trebuie să fie între 1 și 1000")
         break
     except ValueError as e:
        print(f"Date de intrare invalide: {e}")
 
count = 0
 
for i in range(n):
    while True:
         try:
            num = int(input(f"Introduceți numărul {i + 1}: "))
            if num < 1 or num >= 1000000000:
                raise ValueError("Numărul trebuie să fie un număr natural mai mic decât 1.000.000.000")
             break
        except ValueError as e:
            print(f"Date de intrare invalide: {e}")
     if is_prime(num) and is_prime(digit_sum(num)):
        count += 1


print(f"Numărul de elemente prime cu suma cifrelor un număr prim este: {count}")
if __name__ == '__main__':
    n = int(input("Introduceți numărul de numere: "))
    nums = []
    for i in range(n):
        num = int(input(f"Introduceți numărul {i+1}: "))
        nums.append(num)


    if validare_date(n, nums):
        count = 0
        for num in nums:
            if is_prime(num) and is_prime(sum_digits(num)):
                count += 1
        print(f"Numărul de numere prime cu suma cifrelor primă este: {count}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")


    
    


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
Acest cod primește un număr '''n''' și o listă de '''n''' numere și numără câte dintre aceste numere sunt prime și au suma cifrelor, de asemenea, un număr prim. Pentru a face acest lucru, codul utilizează funcțiile '''is_prime''' și '''sum_digits''' pentru a verifica dacă un număr este prim și dacă suma cifrelor sale este, de asemenea, un număr prim. De asemenea, codul include o funcție '''validare_date''' care verifică dacă datele introduse de utilizator respectă restricțiile impuse. Dacă datele sunt valide, programul numără numerele prime din listă care au suma cifrelor, de asemenea, un număr prim și afișează rezultatul. În caz contrar, programul afișează un mesaj corespunzător.

Versiunea curentă din 9 aprilie 2023 19:35

Cerinţa

Se dă un șir cu n numere naturale. Determinați câte dintre ele sunt prime și au suma cifrelor un număr prim.

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 C, reprezentând rezultatul cerut.

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
3

Explicație

Dintre cele 6 numere citite sunt prime : 83 53 401 7. Dintre ele 83 401 7 suma cifrelor număr prim, respectiv 11 5 7. În consecință, sunt 3 numere care respectă regula.

Rezolvare

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

def sum_digits(n):
    return sum(int(d) for d in str(n))

def validare_date(n, nums):
    if n < 1 or n > 1000:
        return False
    for num in nums:
        if num < 1 or num > 1000000000:
            return False
    return True

if __name__ == '__main__':
    n = int(input("Introduceți numărul de numere: "))
    nums = []
    for i in range(n):
        num = int(input(f"Introduceți numărul {i+1}: "))
        nums.append(num)

    if validare_date(n, nums):
        count = 0
        for num in nums:
            if is_prime(num) and is_prime(sum_digits(num)):
                count += 1
        print(f"Numărul de numere prime cu suma cifrelor primă este: {count}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest cod primește un număr n și o listă de n numere și numără câte dintre aceste numere sunt prime și au suma cifrelor, de asemenea, un număr prim. Pentru a face acest lucru, codul utilizează funcțiile is_prime și sum_digits pentru a verifica dacă un număr este prim și dacă suma cifrelor sale este, de asemenea, un număr prim. De asemenea, codul include o funcție validare_date care verifică dacă datele introduse de utilizator respectă restricțiile impuse. Dacă datele sunt valide, programul numără numerele prime din listă care au suma cifrelor, de asemenea, un număr prim și afișează rezultatul. În caz contrar, programul afișează un mesaj corespunzător.