1020 - Mat Prim: Difference between revisions

From Bitnami MediaWiki
Gabi (talk | contribs)
Pagină nouă: = Cerința = Se consideră un șir cu <code>n</code> elemente, numere naturale. Folosind metoda Divide et Impera, determinați cel mai mare element prim din acest șir. = Date de intrare = Programul citește de la tastatură numărul <code>n</code>, iar apoi cele <code>n</code> elemente ale șirului. = Date de ieșire = Programul va afișa pe ecran numărul <code>M</code>, cel mai mare element prim al șirului. = Restricții și precizări = * <code>1 ≤ n ≤ 1000</code...
 
Gabii (talk | contribs)
am modificat codul
 
Line 55: Line 55:
     # Verifică restricția 1: 1 ≤ n ≤ 1000
     # Verifică restricția 1: 1 ≤ n ≤ 1000
     if not (1 <= n <= 1000):
     if not (1 <= n <= 1000):
         print("Eroare: Numărul de elemente trebuie să fie între 1 și 1000.")
         print("Nu respectă condiția lui n")
         return False
         return False


Line 74: Line 74:
     n = int(input("Introduceti numarul de elemente: "))
     n = int(input("Introduceti numarul de elemente: "))
      
      
     # Verifică restricțiile înainte de a continua
     # Inițializează un șir gol pentru a colecta elementele
    if not verifica_restrictii(n, []):
        return
   
     sir = []
     sir = []
    # Colectează elementele șirului
     for i in range(n):
     for i in range(n):
         element = int(input("Introduceti elementul {}: ".format(i + 1)))
         element = int(input("Introduceti elementul {}: ".format(i + 1)))
         sir.append(element)
         sir.append(element)


     if verifica_restrictii(n, sir):
    # Verifică restricțiile înainte de a continua
         rezultat = gaseste_cel_mai_mare_prim(sir, 0, n - 1)
     if not verifica_restrictii(n, sir):
        print("Cel mai mare element prim din sir:", rezultat)
         return
 
    # Continuă cu restul codului
    rezultat = gaseste_cel_mai_mare_prim(sir, 0, n - 1)
    print("Cel mai mare element prim din sir:", rezultat)


# Apelul funcției principale
# Apelul funcției principale
if __name__ == "__main__":
if __name__ == "__main__":
     main()
     main()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 21:28, 9 December 2023

Cerința[edit | edit source]

Se consideră un șir cu n elemente, numere naturale. Folosind metoda Divide et Impera, determinați cel mai mare element prim din acest șir.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul M, cel mai mare element prim al șirului.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • elementele șirului vor fi mai mici decât 1.000.000
  • se garantează că în șir apare cel puțin un element prim
  • se recomandă folosirea metodei Divide et Impera

Exemplul 1[edit | edit source]

Intrare

6
4 1 8 4 3 5 

Ieșire

5

Exemplul 2[edit | edit source]

Intrare

4
4 4 4 4 

Ieșire

Eroare: În șir trebuie să existe cel puțin un element prim.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def este_prim(numar):

   if numar < 2:
       return False
   for i in range(2, int(numar**0.5) + 1):
       if numar % i == 0:
           return False
   return True

def gaseste_cel_mai_mare_prim(sir, stanga, dreapta):

   if stanga == dreapta:
       return sir[stanga] if este_prim(sir[stanga]) else -1
   mijloc = (stanga + dreapta) // 2
   # Caută în stânga și dreapta
   cel_mai_mare_prim_stanga = gaseste_cel_mai_mare_prim(sir, stanga, mijloc)
   cel_mai_mare_prim_dreapta = gaseste_cel_mai_mare_prim(sir, mijloc + 1, dreapta)
   # Combină rezultatele
   return max(cel_mai_mare_prim_stanga, cel_mai_mare_prim_dreapta)

def verifica_restrictii(n, sir):

   # Verifică restricția 1: 1 ≤ n ≤ 1000
   if not (1 <= n <= 1000):
       print("Nu respectă condiția lui n")
       return False
   # Verifică restricția 2: Elementele șirului vor fi mai mici decât 1.000.000
   if any(x >= 1000000 for x in sir):
       print("Eroare: Elementele șirului trebuie să fie mai mici decât 1.000.000.")
       return False
   # Verifică restricția 3: Se garantează că în șir apare cel puțin un element prim
   if all(not este_prim(x) for x in sir):
       print("Eroare: În șir trebuie să existe cel puțin un element prim.")
       return False
   return True

def main():

   # Exemplu de folosire în funcția principală
   n = int(input("Introduceti numarul de elemente: "))
   
   # Inițializează un șir gol pentru a colecta elementele
   sir = []
   # Colectează elementele șirului
   for i in range(n):
       element = int(input("Introduceti elementul {}: ".format(i + 1)))
       sir.append(element)
   # Verifică restricțiile înainte de a continua
   if not verifica_restrictii(n, sir):
       return
   # Continuă cu restul codului
   rezultat = gaseste_cel_mai_mare_prim(sir, 0, n - 1)
   print("Cel mai mare element prim din sir:", rezultat)
  1. Apelul funcției principale

if __name__ == "__main__":

   main()

</syntaxhighlight>