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 3 13 3 7 5, cu suma 31.
Rezolvare
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}")
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.