关于本题 RE
查看原帖
关于本题 RE
556362
qwq___qaq楼主2021/12/6 00:06
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e8,Maxn=4.7e4;
int ans[maxn],b[maxn];
bool vis[maxn];
int cnt,m,t1,t2,x1,x2,y,y2,l,r;
inline void Prime(){
    for(int i=2;i<=Maxn;++i){
        if(!vis[i])
			ans[++cnt]=i;
        for(int j=1;i*ans[j]<=Maxn;j++){
            vis[i*ans[j]]=1;
            if(!(i%ans[j]))
				break;
        }
    }
}
int main(){
    Prime();
    while(~scanf("%d",&l)){
    	l=max(2,l);
    	scanf("%d",&r);
        memset(vis,1,sizeof(vis));
        for(int i=1;i<=cnt;i++)
            for(int j=max(2,(l+ans[i]-1)/ans[i]);j<=r/ans[i];j++)
                vis[ans[i]*j-l]=0;
        m=0;
        for(int i=l;i<=r;i++)
            if(vis[i-l])
                b[++m]=i;
        t1=2147483647,t2=0;
        for(int i=1,k;i<m;i++){
            k=b[i+1]-b[i];
            if(k<t1){
                t1=k;
                x1=b[i];
                y=b[i+1];
            }
            if(k>t2){
                t2=k;
                x2=b[i];
                y2=b[i+1];
            }
        }
        if(!t2)
            puts("There are no adjacent primes.");
        else
            printf("%d,%d are closest, %d,%d are most distant.\n",x1,y,x2,y2);
    }
    return 0;
}
2021/12/6 00:06
加载中...