社区讨论

一个问题

题目总版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@loc65qqa
此快照首次捕获于
2023/10/30 08:36
2 年前
此快照最后确认于
2023/11/04 14:52
2 年前
查看原帖
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啊

回复

1 条回复,欢迎继续交流。

正在加载回复...