3354 - Factori 3
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n numere naturale.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran numărul cerut.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 1000
- cele n numere citite vor fi mai mici decât 1.000.000.000
Exemplu[edit | edit source]
- Intrare
- 5
12 9 16 4 20
- Ieșire
- 16
Explicație[edit | edit source]
Dintre numere citite au un factor prim numerele 9 16 4. Dintre acestea cel mai mare este 16.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> 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")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
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.