为什么换一个变量就对了
查看原帖
为什么换一个变量就对了
556205
Enormous_PuBliC楼主2023/10/18 22:20

RT 原本代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1,M=1e6+1;
bool isprime[N];
int n,q,prime[M],x;
void opao(){
	memset(isprime,1,sizeof isprime);
	isprime[1]=0;
	for(int i=2;i<=n;i++){
		if(isprime[i])prime[++prime[0]]=i;
		for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
			isprime[i*prime[j]]=0;
			if(i%prime[j]==0)break;
		}
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>q;
	opao();
	while(q--)cin>>x,cout<<prime[x]<<endl;
	return 0;
}

TLE
改后:

#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1,M=1e6+1;
bool isprime[N];
int prime[M],T,x,n;
void opao(){
	memset(isprime,1,sizeof isprime);
	isprime[1]=0;
	for(int i=2;i<=n;i++){
		if(isprime[i])prime[++prime[0]]=i;
		for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
			isprime[i*prime[j]]=0;
			if(i%prime[j]==0)break;
		}
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>T;
	opao();
	while(T--)cin>>x,cout<<prime[x]<<endl;
	return 0;
}

通过

2023/10/18 22:20
加载中...