Informatică, întrebare adresată de eleva10, 9 ani în urmă

Să se scrie o funcție C++ care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii 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 ş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, 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
Dacă n=28, apelul subprogramului va furniza prin parametrul a valoarea 23, iar prin b valoarea 29

Răspunsuri la întrebare

Răspuns de lozanalex
4
void sub(int n, int &a, int &b)
{
    int i;
    for (i=n; ; )
    {
        int c=0,s=sqrt(i);
        for (int j=2; j<=s; j++)
            if (i % j == 0) c++;
        if (c==0) break; else i++;
    }
    a=i;
    for (i=n; ; )
    {
        int c=0,s=sqrt(i);
        for (int j=2; j<=s; j++)
            if (i % j == 0) c++;
        if (c==0) break; else i--;
    }
    b=i;
}

eleva10: da o eroare.
eleva10: nu e ok
lozanalex: Ce fel de eroare?
eleva10: sqrt nu a fost declarat in scopul asta.. am schimbat in loc de sqrt j*j<=i si nu mai da eroare. dar da 0 puncte. e pentru pbinfo
lozanalex: void sub(int n, int &a, int &b)
{
int i;
for (i=n+1; ; )
{
int c=0,s=sqrt(i);
for (int j=2; j<=s; j++)
if (i % j == 0) c++;
if (c==0) break; else i++;
}
a=i;
for (i=n-1; ; )
{
int c=0,s=sqrt(i);
for (int j=2; j<=s; j++)
if (i % j == 0) c++;
if (c==0) break; else i--;
}
b=i;
}
lozanalex: Posibil v-a lua mai multe, nu era luat in consideratie cazul cand n e prim
lozanalex: Pentru sqrt trebuie de inclus <cmath> posibil de aceasta nu lucra.
eleva10: si la primul for n merge de la n+1 pana la cat?
lozanalex: for-urile merg pana nu gasesc un numar prim
Alte întrebări interesante