0443 - Divizori Primi

De la Universitas MediaWiki

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.