fbpx

Problema #36 – i_prim – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Scrieţi definiția completă a unui subprogram C++ i_prim care primește prin singurul său parametru, n, un număr natural cu cel mult 9 cifre și returnează diferența minimă p2-p1 în care p1 şi p2 sunt numere prime și p1≤n≤p2.

Restricţii şi precizări

  • numele subprogramului va fi i_prim
  • n>2

Exemplu

Dacă n=28, i_prim(n)=6, deoarece p1=23 și p2=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.

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;
}

int i_prim(int n){

    int p1 = n, p2 = n;
    while(!prim(p1))
        p1--;

    while(!prim(p2))
        p2++;

    return p2 - p1;

}
Comentarii

S-ar putea sa iti placa