3354 - Factori 3

De la Universitas MediaWiki

Cerinţa

Se dau n numere naturale. Determinați cel mai mare număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul NU EXISTA.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieşire

Programul va afișa pe ecran numărul cerut.

Restricții și precizări

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

Exemplu

Intrare
5

12 9 16 4 20

Ieșire
16

Explicație

Dintre numere citite au un factor prim numerele 9 16 4. Dintre acestea cel mai mare este 16.

Rezolvare

def prm(n):
    d = 2
    cnt = 0
    while n > 1:
        if n % d == 0:
            cnt += 1
        while n % d == 0:
            n //= d
        d += 1
        if d * d > n:
            d = n
    return cnt

def validare_date(input_str):
    try:
        n = int(input_str)
        if n <= 0:
            raise ValueError
        return n
    except ValueError:
        print("Datele de intrare nu corespund restricțiilor impuse.")
        exit(1)

if __name__ == '__main__':
    input_str = input("Introduceti numarul de date de intrare: ")
    n = validare_date(input_str)

    nums = []
    for i in range(n):
        x = input("Introduceti numarul {}: ".format(i + 1))
        nums.append(int(x))

    maxi = 0
    for x in nums:
        if prm(x) == 1 and x > maxi:
            maxi = x

    if maxi != 0:
        print("Numarul maxim care indeplineste conditia este:", maxi)
    else:
        print("NU EXISTA")

Explicație rezolvare

Acest program are ca scop găsirea celui mai mare număr dintr-un set de numere introduse de utilizator care are exact doi divizori (numere prime).

Pentru a face acest lucru, programul folosește două funcții. Funcția prm(n) calculează numărul de divizori ai unui număr întreg pozitiv n. Funcția validare_date(input_str) verifică dacă datele de intrare introduse de utilizator sunt corecte.

În funcția principală a programului, întâi se solicită numărul de date de intrare și se verifică utilizând funcția validare_date(input_str). Apoi se solicită introducerea fiecărui număr în parte și se stochează într-o listă.

În final, programul iterează prin lista de numere, determină numărul de divizori ai fiecărui număr și dacă acesta are exact doi divizori și este mai mare decât numerele anterioare verificate, îl atribuie variabilei maxi. Dacă niciun număr din listă nu îndeplinește condiția, se afișează NU EXISTA.