代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
const int N=1e6+3e5,M=1e5;
ll st[N],prime[N],cnt=0,pos,primes[N];
void init()
{
    for(int i=2;i<M;i++)
    {
        if(!st[i]) prime[cnt++]=i;
        for(int j=0;i*prime[j]<M;j++)
        {
            st[i*prime[j]]=true;
            if(i%prime[j]==0) break;
        }
    }
    pos=cnt;
}//存了2^31-1里面的最小质因子.

signed main()
{
    init();
    int l,r;
    while(cin>>l>>r)
    {
        cnt=pos;
        memset(st,0,sizeof st);
        for(int i=0;i<cnt;i++)
        {
            for(ll j=max(2*prime[i],(l+prime[i]-1)/prime[i]*prime[i]);j<=r;j+=prime[i])
            {
                st[j-l]=true;
            }
        }
        cnt=0;
        for(int i=0;i<=r-l;i++)
        {
            if(!st[i]&&i+l>=2) primes[cnt++]=i+l;
        }
        if(cnt<2) puts("There are no adjacent primes.");
        else
        {
            int mi=2e9,mx=-1;
            int ta,tb,tc,td;
            for(int i=1;i<cnt;i++)
            {
                if(primes[i]-primes[i-1]>mx)
                {
                    mx=primes[i]-primes[i-1];
                    ta=primes[i-1];
                    tb=primes[i];
                }
                if(primes[i]-primes[i-1]<mi)
                {
                    mi=primes[i]-primes[i-1];
                    tc=primes[i-1];
                    td=primes[i];
                }
            }
            printf("%lld,%lld are closest, %lld,%lld are most distant.\n",tc,td,ta,tb);
        }
    }
    return 0;
}