0258 - Det Prim

De la Universitas MediaWiki

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.