Files
OI-source/7.2689.cpp
2023-08-03 09:22:52 +08:00

42 lines
1.0 KiB
C++

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL maxn=65536;
const LL maxm=1e6+5;
LL L,R,p[maxn],v[maxn],pcnt;
bool flg[maxm]; LL tot,num[maxm];
void solve()
{
memset(flg,1,sizeof(flg));
for(LL i=0;i<pcnt&&p[i]<=R;i++)
for(LL j=max(L/p[i],2ll);j<=R/p[i]+1;j++)
if(L<=p[i]*j&&p[i]*j<=R) flg[p[i]*j-L]=0;
if(L==1) flg[0]=0;
tot=0;
for(LL i=L;i<=R;i++) if(flg[i-L]) num[tot++]=i;
if(tot<2) { puts("There are no adjacent primes."); return; }
LL la=num[0],ra=num[1],lb=num[0],rb=num[1];
for(LL i=1;i<tot-1;i++)
{
if(num[i+1]-num[i]<ra-la) la=num[i],ra=num[i+1];
if(num[i+1]-num[i]>rb-lb) lb=num[i],rb=num[i+1];
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",la,ra,lb,rb);
}
int main()
{
#ifdef local
freopen("pro.in","r",stdin);
#endif
for(LL i=1;i<maxn;i++) v[i]=i;
for(LL i=2;i<maxn;i++)
{
if(v[i]==i) p[pcnt++]=i;
for(LL j=0;j<pcnt&&p[j]*i<maxn&&p[j]<=v[i];j++) v[p[j]*i]=p[j];
}
while(scanf("%lld%lld",&L,&R)==2) solve();
return 0;
}