#include <bits/stdc++.h>
#define ll long long
#define inf 1<<30
using namespace std;
const int N=5e4+5;
ll l,r,cnt=0,flag;
ll prime[N];//素数表
ll vis[1000005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
for(int i=2;i<=5e4;i++)//打素数表
{
flag=0;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
prime[cnt++]=i;
}
while(cin >> l >> r)
{
memset(vis,0,sizeof(vis));//假设区间内都是素数
for(int i=0;i<cnt;i++)
{
ll x=l/prime[i];//倍数开始范围
while(x<=1)//起始倍数要为2
x++;
for(ll j=x*prime[i];j<=r;j+=prime[i])//j为数
{
if(j>=l)//注意
vis[j-l]=1;//合数,区间平移
}
}
if(l==1)//1既不是合数也不是素数,特殊点
vis[0]=1;
ll st=-1,mi=inf,ma=0,x1,y1,x2,y2;
for(int i=0;i<=r-l;i++)
{
if(!vis[i])
{
if(st==-1)
{
st=i;
continue;
}
if(mi>i-st)
mi=i-st,x1=st,y1=i;
if(ma<i-st)
ma=i-st,x2=st,y2=i;
st=i;
}
}
if(mi==inf)
printf("There are no adjacent primes.\n");
else
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",x1+l,y1+l,x2+l,y2+l);
}
return 0;
}
12-24
1152
1152
07-07
775
775
02-04
370
370

被折叠的 条评论
为什么被折叠?



