0406 - Sum Cif Prim

De la Universitas MediaWiki
Versiunea din 25 martie 2023 09:40, autor: Paul Matei (discuție | contribuții) (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''' ==...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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(num):
    """Verifică dacă un număr este prim."""
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True


def digit_sum(num):
    """Calculează suma cifrelor unui număr."""
    return sum(int(digit) for digit in str(num))


# Validare date de intrare
while 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}")