3354 - Factori 3

From Bitnami MediaWiki
Revision as of 10:47, 25 April 2023 by Paul Matei (talk | contribs) (Pagină nouă: == 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 de...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.