Cerinţa
Să se scrie o funcție C++ care, pentru un număr natural n
transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cele mai mari două numere naturale prime mai mici decât n
.
Restricţii şi 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,5 ≤ n < 1000000000
a
șib
sunt parametrii prin care funcția va întoarce cele două valori căutate
- primul parametru,
- parametrii
a
șib
respectă relațiaa>b
Exemplu
Dacă n=28
, apelul subprogramului va furniza prin parametrul a
valoarea 23
, iar prin b
valoarea 19
.
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.
bool prim(int n){ int d = 2, cnt = 1; while(n > 1){ int p = 0; while(n % d == 0) n /= d, p++; cnt *= (p + 1); d++; if(d * d > n) d = n; } return cnt == 2; } void sub(int n, int& a, int& b){ a = -1, b = -1; n--; while(!prim(n)) n--; a = n; n--; while(!prim(n)) n--; b = n; }