一个问题
  • 板块题目总版
  • 楼主珂朵莉!
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/13 23:02
  • 上次更新2023/11/4 14:52:35
查看原帖
一个问题
191956
珂朵莉!楼主2021/7/13 23:02
using namespace std;
int l,r;
bool p[100010],p2[1000005];
int minp[100010]={0};
void onp(int n){
	p[1]=1;
	for(int i=2;i<=n;i++){
		if(minp[i]==0)
			minp[i]=i;
		else 
			p[i]=1;
		for(int j=2;j<=minp[i];j++){
			if(!p[j]){
				minp[j*i]=j;
			}
		}
	}
}
int prime[1000005];
int main(){
	onp(100005);
	for(int i=2;i<=100005;i++)if(!p[i])cout<<i<<" ";
	while(cin>>l>>r){
		int sqr=int(sqrt(double(r)));
		int m=0;
		for(int i=1;i<=sqr;i++)
			if(!p[i])
				for(int j=floor(l/i);j<=ceil(r/i);j++)
					p2[i*j-l+1]=1;
		for(int i=1;i<=r-l+1;i++)if(!p2[i])prime[++m]=i+l-1;
		if(m<=1){
			cout<<"There are no adjacent primes.";
			return 0;
		}
		int ans1,ans2,mn=0x3f3f3f3f,mx=0;
		for(int i=1;i<=m;i++)
			if(mn>(prime[i+1]-prime[i])){
				mn=prime[i+1]-prime[i];
				ans1=prime[i];
				ans2=prime[i+1];
			}
		cout<<ans1<<","<<ans2<<" are closest, ";
		for(int i=1;i<=m;i++)
			if(mx<(prime[i+1]-prime[i])){
				mx=prime[i+1]-prime[i];
				ans1=prime[i];
				ans2=prime[i+1];
			}
		cout<<ans1<<","<<ans2<<" are most distant.";
	}
}

这代码为什么会re啊

2021/7/13 23:02
加载中...