👤
Infovtm
a fost răspuns

Dau coroana!!!
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.


Răspuns :

#include <math.h>

int i_prim (int n)

{

     int d=1,i;

     for (i=2;i<=sqrt(n);++i){

       if (n%i==0) ++d;

     }

     if (d==1) return 0;

     else {

      int p1=1,m;

      m=n;

      if (n%2==0) --m;

      else  m-=2;

      while (p1==1){

       d=1;

       for (i=2;i<=sqrt(m);++i)

           if (m%i==0) ++d;

       if (d==1) p1=m;

       else m-=2;

      }

      if (n%2==0) m=n+1;

      else  m=n+2;

      int p2=1;

       while (p2==1){

       d=1;

       for (i=2;i<=sqrt(m);++i)

           if (m%i==0) ++d;

       if (d==1) p2=m;

       else m+=2;

      }

      return p2-p1;

     }

}