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.
AntiEaglesDavids:
si n la ce-ti trebuie?
Răspunsuri la întrebare
Răspuns de
5
Nu-i complet :) (merge pe cateva cazuri (sau poate nu), te las pe tine sa completezi)
int i_prim(int val)
{
int p1, p2, ok;
p1 = p2 = val;
for(;;)
{
ok = 0;
for(int d=2; d*d<=p2; d++)
if(!(p2 % d)) { ok = 1; break; }
if(!ok) break;
p2++;
}
for(;;)
{
ok = 0;
for(int d=2; d*d<=p1; d++)
if(!(p1 % d)) { ok = 1; break; }
if(!ok) break;
p1--;
}
return p2 - p1;
}
int i_prim(int val)
{
int p1, p2, ok;
p1 = p2 = val;
for(;;)
{
ok = 0;
for(int d=2; d*d<=p2; d++)
if(!(p2 % d)) { ok = 1; break; }
if(!ok) break;
p2++;
}
for(;;)
{
ok = 0;
for(int d=2; d*d<=p1; d++)
if(!(p1 % d)) { ok = 1; break; }
if(!ok) break;
p1--;
}
return p2 - p1;
}
{
int p1, p2, ok1, ok2;
p1 = p2 = val;
while(true) {
ok1 = ok2 = 0;
if(p1 == 2 || p1 == 3 || p2 == 2 || p2 == 3) break;
for(int d=2; d*d<=p2; d++) {
if(!ok2) if(!(p2 % d)) ok2 = 1;
if(!ok1) if(!(p1 % d)) ok1 = 1;
if(ok2 && ok1) break;
}
if(!ok2 && !ok1) break;
if(ok2) p2++;
if(ok1) p1--;
}
return p2 - p1;
}
Alte întrebări interesante
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Ed. muzicală,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Chimie,
9 ani în urmă