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