0443 - Divizori Primi

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dau n numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numărul S, reprezentând suma cerută.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mari decât 1 și mai mici decât 1.000.000.000

Exemplu[edit | edit source]

Intrare
5

15 13 39 49 25

Ieșire
31

Explicație[edit | edit source]

Pentru numerele date, primul divizor prim este 3 13 3 7 5, cu suma 31.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math

def prim(n):

   d = 2
   p = 0
   while n > 1:
       p = 0
       while n % d == 0:
           p += 1
           n //= d
       if p > 0:
           return d
       d += 1
       if d * d > n:
           d = n
   return n

def validare_date():

   n = 0
   while n <= 0:
       try:
           n = int(input("Introduceti n: "))
           if n <= 0:
               print("n trebuie sa fie un numar intreg pozitiv.")
       except ValueError:
           print("n trebuie sa fie un numar intreg pozitiv.")
   return n

if __name__ == '__main__':

   if validare_date():
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")
   n = validare_date()
   s = 0
   for i in range(n):
       x = 0
       while x <= 0:
           try:
               x = int(input(f"Introduceti x[{i+1}]: "))
               if x <= 0:
                   print("x trebuie sa fie un numar intreg pozitiv.")
           except ValueError:
               print("x trebuie sa fie un numar intreg pozitiv.")
       s += prim(x)
   print(f"Suma divizorilor primi este: {s}")



</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest program calculează suma divizorilor primi ai unui set de numere introduse de utilizator. Folosește o funcție pentru a verifica dacă intrarea este validă și o altă funcție pentru a găsi cel mai mic divizor prim al unui număr. Programul calculează suma divizorilor primi pentru fiecare număr introdus de utilizator și le adună pentru a obține o valoare totală, pe care o afișează la final.