fbpx

Problema #258 – detPrim – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa