0912 - PrimeVecine: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: ==Cerință== Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cel mai mare număr prim mai mic decât n și cel mai mic număr prim mai mare decât n. ==Restricții de precizări== *numele funcției va fi '''sub''' *funcția va avea exact trei parametri, în această ordine: *primul parametru,''' n''', reprezintă un număr natural,''' 3 ≤ n < 1.000.000.000''' *'''a'...)
 
 
(Nu s-au afișat 7 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 1: Linia 1:
==Cerință==
==Cerință==
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cel mai mare număr prim mai mic decât n și cel mai mic număr prim mai mare decât n.
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cel mai mare număr prim mai mic decât n și cel mai mic număr prim mai mare decât n.
==Date de intrare== 
Se citește '''n''' un număr natural de la tastatură, '''3 ≤ n < 1.000.000.000'''
==Date de ieșire==
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa:
*cel mai mare număr prim mai mic decât '''n'''
*cel mai mic număr prim mai mare decât '''n'''
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".


==Restricții de precizări==
==Restricții de precizări==


*numele funcției va fi '''sub'''
*funcția va avea exact trei parametri, în această ordine:
*funcția va avea exact trei parametri, în această ordine:
*primul parametru,''' n''', reprezintă un număr natural,''' 3 ≤ n < 1.000.000.000'''
*primul parametru,''' n''', reprezintă un număr natural,''' 3 ≤ n < 1.000.000.000'''
Linia 13: Linia 23:
==Exemplu==
==Exemplu==


Dacă '''n=28''', apelul subprogramului va furniza prin parametrul '''a''' valoarea '''23''', iar prin '''b''' valoarea '''29'''.
;Intrare
:28
;Ieșire
:Datele introduse sunt corecte.
:23 29.


==Important==
==Important==
Linia 23: Linia 37:
===Rezolvare ver. 1===
===Rezolvare ver. 1===
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def validare(n, a, b):
    return 3 <= int(n) <= 1_000_000_000 and a < int(n) and b > int(n)


def get_prime_numbers(n, a, b):
def get_prime_numbers(n, a, b):
Linia 33: Linia 50:
         return True
         return True


     for i in range(n-1, 1, -1):
     for i in range(n - 1, 1, -1):
         if is_prime(i):
         if is_prime(i):
             a = i
             a = i
Linia 44: Linia 61:
             break
             break
         i += 1
         i += 1
   
 
     return a, b
     return a, b




if __name__ == '__main__':
if __name__ == '__main__':
     n = 28
     n = int(input())
     a, b = None, None
     a, b = None, None
     a, b = get_prime_numbers(n, a, b)
     a, b = get_prime_numbers(n, a, b)
     print(f"Cel mai mare numar prim mai mic decat {n} este {a}")
     if validare(n, a, b):
     print(f"Cel mai mic numar prim mai mare decat {n} este {b}")
        print("Datele introduse sunt corecte.")
        print(a, b, sep=" ")
     else:
        print("Datele introduse nu sunt corecte.")
</syntaxhighlight>


==Explicatii==


Această implementare Python definește o funcție get_prime_numbers(n, a, b) care primește ca parametri un număr natural n și două variabile a și b. Scopul acestei funcții este de a găsi cel mai mare număr prim mai mic decât n (valoarea va fi atribuită variabilei a) și cel mai mic număr prim mai mare decât n (valoarea va fi atribuită variabilei b).


</syntaxhighlight>
Funcția utilizează o funcție internă is_prime(x) pentru a verifica dacă un număr x este prim sau nu. Pentru a determina dacă x este prim, funcția is_prime(x) utilizează metoda clasică a verificării dacă x este divizibil cu orice număr întreg cuprins între 2 și rădăcina pătrată din x.
 
Mai întâi, funcția get_prime_numbers(n, a, b) caută cel mai mare număr prim mai mic decât n. Acest lucru este realizat prin parcurgerea tuturor numerelor mai mici decât n, începând cu n-1, și verificând dacă fiecare număr este prim sau nu. Când se găsește primul număr prim, acesta este atribuit variabilei a și parcurgerea se oprește.
 
În continuare, funcția caută cel mai mic număr prim mai mare decât n. Acest lucru este realizat prin parcurgerea tuturor numerelor mai mari decât n, începând cu n+1, și verificând dacă fiecare număr este prim sau nu. Când se găsește primul număr prim, acesta este atribuit variabilei b și parcurgerea se oprește.
 
Funcția get_prime_numbers(n, a, b) returnează o tuplă cu cele două numere prime găsite: (a, b).
 
Funcția validare(n, a, b) este apelată în scopul de a valida faptul că valorile returnate sunt corecte. Aceasta verifică dacă valorile respectă condițiile impuse în enunț, adică n este un număr natural cuprins între 3 și 1.000.000.000, iar a este mai mic decât n și b este mai mare decât n. Funcția returnează True dacă valorile sunt corecte și False altfel.
 
În funcția principală (if __name__ == '__main__':), numărul n este inițializat cu o valoare și variabilele a și b sunt setate inițial la None. Apoi, se apelează funcția get_prime_numbers(n, a, b) pentru a găsi cele două numere prime. Dacă valorile returnate sunt corecte, se afișează cele două numere prime găsite. În caz contrar, se afișează un mesaj de eroare

Versiunea curentă din 6 mai 2023 16:35

Cerință

Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cel mai mare număr prim mai mic decât n și cel mai mic număr prim mai mare decât n.


Date de intrare

Se citește n un număr natural de la tastatură, 3 ≤ n < 1.000.000.000

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa:

  • cel mai mare număr prim mai mic decât n
  • cel mai mic număr prim mai mare decât n

În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".

Restricții de precizări

  • funcția va avea exact trei parametri, în această ordine:
  • primul parametru, n, reprezintă un număr natural, 3 ≤ n < 1.000.000.000
  • a și b sunt parametrii prin care funcția va întoarce cele două valori cerute, astfel:
  • a este cel mai mare număr prim mai mic decât n
  • b este cel mai mic număr prim mai mare decât n

Exemplu

Intrare
28
Ieșire
Datele introduse sunt corecte.
23 29.

Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Rezolvare

Rezolvare ver. 1

def validare(n, a, b):
    return 3 <= int(n) <= 1_000_000_000 and a < int(n) and b > int(n)


def get_prime_numbers(n, a, b):
    def is_prime(x):
        if x < 2:
            return False
        for i in range(2, int(x ** 0.5) + 1):
            if x % i == 0:
                return False
        return True

    for i in range(n - 1, 1, -1):
        if is_prime(i):
            a = i
            break

    i = n + 1
    while True:
        if is_prime(i):
            b = i
            break
        i += 1

    return a, b


if __name__ == '__main__':
    n = int(input())
    a, b = None, None
    a, b = get_prime_numbers(n, a, b)
    if validare(n, a, b):
        print("Datele introduse sunt corecte.")
        print(a, b, sep=" ")
    else:
        print("Datele introduse nu sunt corecte.")

Explicatii

Această implementare Python definește o funcție get_prime_numbers(n, a, b) care primește ca parametri un număr natural n și două variabile a și b. Scopul acestei funcții este de a găsi cel mai mare număr prim mai mic decât n (valoarea va fi atribuită variabilei a) și cel mai mic număr prim mai mare decât n (valoarea va fi atribuită variabilei b).

Funcția utilizează o funcție internă is_prime(x) pentru a verifica dacă un număr x este prim sau nu. Pentru a determina dacă x este prim, funcția is_prime(x) utilizează metoda clasică a verificării dacă x este divizibil cu orice număr întreg cuprins între 2 și rădăcina pătrată din x.

Mai întâi, funcția get_prime_numbers(n, a, b) caută cel mai mare număr prim mai mic decât n. Acest lucru este realizat prin parcurgerea tuturor numerelor mai mici decât n, începând cu n-1, și verificând dacă fiecare număr este prim sau nu. Când se găsește primul număr prim, acesta este atribuit variabilei a și parcurgerea se oprește.

În continuare, funcția caută cel mai mic număr prim mai mare decât n. Acest lucru este realizat prin parcurgerea tuturor numerelor mai mari decât n, începând cu n+1, și verificând dacă fiecare număr este prim sau nu. Când se găsește primul număr prim, acesta este atribuit variabilei b și parcurgerea se oprește.

Funcția get_prime_numbers(n, a, b) returnează o tuplă cu cele două numere prime găsite: (a, b).

Funcția validare(n, a, b) este apelată în scopul de a valida faptul că valorile returnate sunt corecte. Aceasta verifică dacă valorile respectă condițiile impuse în enunț, adică n este un număr natural cuprins între 3 și 1.000.000.000, iar a este mai mic decât n și b este mai mare decât n. Funcția returnează True dacă valorile sunt corecte și False altfel.

În funcția principală (if __name__ == '__main__':), numărul n este inițializat cu o valoare și variabilele a și b sunt setate inițial la None. Apoi, se apelează funcția get_prime_numbers(n, a, b) pentru a găsi cele două numere prime. Dacă valorile returnate sunt corecte, se afișează cele două numere prime găsite. În caz contrar, se afișează un mesaj de eroare