315
Cerinţa
Se dau două numere naturale a şi b, a≤b. Să se determine, dacă există, un număr prim x care aparţine intervalului închis [a,b] pentru care valoarea expresiei |b+a-2*x| este minimă, unde |m| este valoarea absolută a numărului întreg m. Dacă nu există nici un astfel de număr, se va afişa mesajul NU EXISTA, iar dacă există mai multe se va afişa cel mai mic.
Date de intrare
Programul citește de la tastatură numerele a şi b.
Date de ieşire
Programul afișează pe ecran numărul x determinat, sau mesajul NU EXISTA.
Restricţii şi precizări
1 ≤ a ≤ b ≤ 1.000.000.000
Exemplu
Date de intrare
7 18
Date de ieșire
13
#include <bits/stdc++.h>
using namespace std;
int prim(int n)
{
int cnt=0;
for(int i = 1 ; i * i <= n ; ++i)
{
if(n % i == 0)
cnt+=2;
if(i * i == n)
cnt--;
}
if(cnt==2)
return 1;
else
return 0;
}
int main()
{
int a , b;
cin >> a >> b;
int nr=(a+b)/2;
int min=1000000000 , nprim=-1;
for(int i = nr ; i >= a ; --i)
{
if(prim(i))
{
min=a+b-2*i;
nprim=i;
break;
}
}
for(int i = nr+1 ; i <= b ; ++i)
{
if(prim(i))
{
if(a+b-2*i < min)
nprim=i;
break;
}
}
if(nprim!=-1)
cout << nprim;
else
cout << "NU EXISTA";
return 0;
}
Comentarii