0443 - Divizori Primi

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.