```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
long long l,r,v[2000005],p[2000005],x=1,book[2000005];
void creat()
{
long long i,n,j;
n=sqrt(r);
for(i=2;i<=n;i++)
{
if(book[i]!=0) continue;
v[x]=i;
x++;
for(j=i;j<=n/i;j++)
{
book[i*j]=1;
}
}
/*int i,j,flag=0;
for(i=2;i<=sqrt(r);i++)
{
if(i==2||i==3)
{
v[x]=i;
x++;
}
else
{
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
{
v[x]=i;
x++;
}
}
flag=0;
}*/
}
int main(int argc, char *argv[]) {
long long i,e,t,flag2=0,ans=1,maxn=-9999999,minn=99999999,st,en,st2,en2;
while(scanf("%lld %lld",&l,&r)!=EOF)
{
creat();
for(e=l;e<=r;e++)
{
if(e==1) continue;
if(e==2||e==3)
{
p[ans]=e;
ans++;
}
else
{
for(t=1;t<=x-1;t++)
{
if(e%v[t]==0&&e!=v[t])
{
flag2=1;
break;
}
}
if(flag2==0)
{
p[ans]=e;
ans++;
}
flag2=0;
}
}
for(e=1;e<=ans-2;e++)
{
if(p[e+1]-p[e]>maxn)
{
maxn=p[e+1]-p[e];
st=p[e];
en=p[e+1];
}
if(p[e+1]-p[e]<minn)
{
minn=p[e+1]-p[e];
st2=p[e];
en2=p[e+1];
}
}
if(ans==1||ans==2) printf("There are no adjacent primes.\n");
else printf("%lld,%lld are closest, %lld,%lld are most distant.\n",st2,en2,st,en);
memset(v,0,sizeof(v));
memset(p,0,sizeof(p));
memset(book,0,sizeof(book));
ans=1;
x=1;
}
return 0;
}
```
by limarks @ 2018-10-05 09:38:30