Cześć. Robię zadanie, które polega na znalezieniu najbliższej liczby pierwszej do wczytanej liczby. W przypadku, gdy liczba ma w takiej samej odległości dwie liczby pierwsze, tzn. jedną oddaloną np. o 5 jednostek, a drugą większą o 5 jednostek, należy wypisać tą mniejszą.
Program mi nie wyrabia czasowo, jak mógłbym to naprawić?
#include <bits/stdc++.h>
#include <sstream>
using namespace std;
bool czy_pierwsza(int n)
{
if(n<2)
return false;
for(int i=2; i*i<=n; i++)
if(n%i==0)
return false;
return true;
}
int main ()
{
int t;
scanf("%d",&t);
for(int i = 0 ; i < t ; i++)
{
int a;
scanf("%d",&a);
int przed = 0 ;
int po = 0 ;
int f = 1;
if(czy_pierwsza(a)==true)printf("%d\n",a);
else
{
while(przed==0||po==0)
{
if(czy_pierwsza(a-f)==true)
{
przed = a-f;
printf("%d\n",przed);
break;
}
if(czy_pierwsza(a+f)==true)
{
po = a + f;
printf("%d\n",po);
break;
}
f++;
}
}
}
}