0443 - Divizori Primi

From Bitnami MediaWiki
Revision as of 08:36, 29 April 2023 by Paul Matei (talk | contribs) (Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spaţii. == Date de ieşire == Programul afișează pe ecran numărul '''S''', reprezentând suma cerută. == Restricții și precizări == *'''1 ≤ n ≤ 1000''' *cele '''n''' numere citite vor fi mai mari decât '''1...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

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

Date de intrare

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

Date de ieşire

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

Restricții și precizări

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

Exemplu

Intrare
5

15 13 39 49 25

Ieșire
31

Explicație

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

Rezolvare

<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

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.