0406 - Sum Cif Prim
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
<syntaxhighlight lang="python" line> 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}")
</syntaxhighlight>