0406 - Sum Cif Prim

From Bitnami MediaWiki
Revision as of 09:40, 25 March 2023 by Paul Matei (talk | contribs) (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''' ==...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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))


  1. 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>