求助本题RE
查看原帖
求助本题RE
556362
Unnamed114514楼主2021/9/25 23:07
#include<iostream>
#include<algorithm>
#include<cstring>
#define Maxn 46340
using namespace std;
int ans[1000010],b[1000010];
bool vis[1000010];
int cnt,m,t1,t2,x1,x2,y,y2,l,r;
void Prime(){
	for(int i=2;i<=Maxn;i++){
		if(!vis[i]){
			ans[++cnt]=i;
			for(int j=1;j<=cnt&&i*ans[j]<=Maxn;j++){
				vis[i*ans[j]]=1;
				if(!(i%ans[j]))
					break;
   			}
		}
	}
}
int main(){
	Prime();
	while(cin>>l>>r){
		memset(vis,1,sizeof(vis));
		if(l==1)
			vis[0]=0;
		for(int i=1;i<=cnt;i++)
			for(int j=l/ans[i];j<=r/ans[i];j++)
				if(j>1)
					vis[ans[i]*j-l]=0;
		m=0;
		for(int i=1;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/9/25 23:07
加载中...