0912 - PrimeVecine: Difference between revisions
Vardai Erwin (talk | contribs) |
Vardai Erwin (talk | contribs) |
||
(6 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== | ||
*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== | ||
;Intrare | |||
:28 | |||
;Ieșire | |||
:Datele introduse sunt corecte. | |||
:23 29. | |||
==Important== | ==Important== | ||
Line 52: | Line 66: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n = | 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) | ||
if validare(n, a, b): | if validare(n, a, b): | ||
print("Datele introduse sunt corecte.") | print("Datele introduse sunt corecte.") | ||
print( | print(a, b, sep=" ") | ||
else: | else: | ||
print("Datele introduse nu sunt corecte.") | print("Datele introduse nu sunt corecte.") | ||
</syntaxhighlight> | </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). | |||
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