0443 - Divizori Primi
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.