0258 - Det Prim
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 citește de la tastatură numerele a şi b.
Date de ieşire
Programul afișează pe ecran numărul x determinat, sau mesajul NU EXISTA.
Restricții și precizări
- 1 ≤ a ≤ b ≤ 1.000.000.000
Exemplu
- Intrare
- 7 18
- Ieșire
- 13
Rezolvare
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.")
# 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")
Explicație rezolvare
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.