0258 - Det Prim

From Bitnami MediaWiki
Revision as of 11:04, 29 April 2023 by Paul Matei (talk | contribs) (Pagină nouă: == Cerinţa == Se dau două numere naturale '''a''' şi '''b''', '''a≤b'''. Să se determine, dacă există, un număr prim '''x''' care aparţine intervalului închis '''[a,b]''' pentru care valoarea expresiei '''|b+a-2*x|''' este minimă, unde '''|m|''' este valoarea absolută a numărului întreg '''m'''. Dacă nu există nici un astfel de număr, se va afişa mesajul '''NU EXISTA''', iar dacă există mai multe se va afişa cel mai mic. == Date de intrare == Programul c...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dau două numere naturale a şi b, a≤b. Să se determine, dacă există, un număr prim x care aparţine intervalului închis [a,b] pentru care valoarea expresiei |b+a-2*x| este minimă, unde |m| este valoarea absolută a numărului întreg m. Dacă nu există nici un astfel de număr, se va afişa mesajul NU EXISTA, iar dacă există mai multe se va afişa cel mai mic.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele a şi b.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numărul x determinat, sau mesajul NU EXISTA.

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

  • 1 ≤ a ≤ b ≤ 1.000.000.000

Exemplu[edit | edit source]

Intrare
7 18
Ieșire
13

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

 import math

def este_prim(x):

   """
   Verifică dacă un număr x este prim.
   """
   return x > 1 and all(x % i != 0 for i in range(2, int(math.sqrt(x))+1))

def validare_date(a, b):

   """
   Verifică dacă datele de intrare sunt valide.
   """
   if not isinstance(a, int) or not isinstance(b, int):
       return False
   if not (1 < a <= b <= 1000000000):
       return False
   return True

if __name__ == '__main__':

   print("Introduceti intervalul [a, b]:")
   a = int(input("a = "))
   b = int(input("b = "))
   # validam datele de intrare
   if validare_date(a, b):
       min_val = float('inf')  # initializam minimul cu o valoare foarte mare
       min_prim = None  # initializam numarul prim cu None
       # cautam numarul prim x din intervalul [a,b] pentru care expresia este minima
       for x in range(a, b+1):
           if este_prim(x):
               # calculam valoarea expresiei |b+a-2*x|
               val = abs(b+a-2*x)
               # actualizam minimul si numarul prim daca este cazul
               if val < min_val:
                   min_val = val
                   min_prim = x
       # afisam rezultatul
       if min_prim is None:
           print("NU EXISTA")
       else:
           print(f"Numarul prim din intervalul [{a}, {b}] pentru care expresia este minima este {min_prim}.")
   else:
       print("Datele de intrare nu corespund restricților impuse.")
  1. afisam un mesaj care sa confirme faptul ca datele de intrare sunt valide

print(f"\nDatele de intrare ({a}, {b}) corespund restricțiilor impuse.\n")



</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acesta este un cod Python care găsește un număr prim într-un interval specificat [a, b], care minimizează o anumită expresie. Se verifică dacă numerele de intrare sunt valide, se caută numărul prim care minimizează expresia și se afișează rezultatul. La final se afișează un mesaj de confirmare a validității datelor de intrare.