3355 - Factori 4

From Bitnami MediaWiki
Revision as of 11:07, 25 April 2023 by Paul Matei (talk | contribs) (Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale. Determinați cel mai mic 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 mi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dau n numere naturale. Determinați cel mai mic 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
4

Explicație[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math


def validare_date(n, arr):

   if not isinstance(n, int) or n <= 0:
       return False
   if not isinstance(arr, list) or len(arr) != n or not all(isinstance(x, int) for x in arr):
       return False
   return True


def ok(n):

   d, cnt = 2, 0
   while n > 1:
       p = 0
       while n % d == 0:
           n //= d
           p += 1
       if p:
           cnt += 1
       d += 1
       if d * d > n:
           d = n
   return cnt == 1


if __name__ == '__main__':

   n = int(input("Introduceti numarul de elemente din lista: "))
   arr = list(map(int, input("Introduceti lista de numere: ").split()))
   if validare_date(n, arr):
       mini = math.inf
       for x in arr:
           if ok(x) and x < mini:
               mini = x
       if mini < math.inf:
           print("Cel mai mic număr prim putere din listă este:", mini)
       else:
           print("Nu există niciun număr prim putere în listă.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest cod primește o listă de numere întregi și găsește cel mai mic număr din listă care este un număr prim putere.

Pentru a verifica dacă un număr este un număr prim putere, se calculează factorii primi ai numărului și se numără câți factori primi diferiți are. Dacă numărul de factori primi diferiți este 1, atunci numărul este o putere a unui număr prim.

Codul începe prin a citi numărul de elemente din listă și lista însăși, utilizând funcția input() și list(). Apoi, se validează datele de intrare cu funcția validare_date(), care verifică că n este un număr întreg pozitiv și că lista conține n numere întregi.

După validarea datelor de intrare, se inițializează variabila mini cu o valoare foarte mare. Se parcurge lista cu un for loop, și pentru fiecare element se verifică dacă este un număr prim putere cu ajutorul funcției ok(). Dacă numărul este un număr prim putere și este mai mic decât valoarea actuală a lui mini, atunci acesta devine noul mini.

La final, se verifică dacă mini a fost actualizat. Dacă da, atunci se afișează cel mai mic număr prim putere din listă, altfel se afișează un mesaj de eroare.