0912 - PrimeVecine: Difference between revisions

From Bitnami 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'...
 
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 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'''
Line 13: Line 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==
Line 23: Line 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):
Line 33: Line 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
Line 44: Line 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

Latest revision as of 16:35, 6 May 2023

Cerință[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

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

Important[edit | edit source]

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[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<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 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.")

</syntaxhighlight>

Explicatii[edit | edit source]

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