疑惑
查看原帖
疑惑
866621
yfl20130101楼主2024/6/10 11:45

已 AC,但还有疑问。这是全 TLE 和 AC 的代码。 TLE:

#include<iostream>
using namespace std;
int p[100000005],ans;
bool v[100000005];
int primes(int n){
	v[1]=true;
	for(int i=2;i<=n;i++){
		if(!v[i]){
			p[++ans]=i;
		}
		for(int j=1;j<=ans&&p[j]*i<=n;j++){
			v[i*p[j]]=true;
			if(i%p[j]==0){
				break;
			}
		}
	}
}
int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int n,q,x;
	cin>>n>>q;
	primes(n);
	while(q--){
		cin>>x;
		cout<<p[x]<<'\n';
	}
	return 0;
}

AC:

#include<iostream>
using namespace std;
int p[100000005];
bool v[100000005];
int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int n,q,x;
	cin>>n>>q;
	int ans=0;
    v[1]=true;
	for(int i=2;i<=n;i++){
		if(!v[i]){
			p[++ans]=i;
		}
		for(int j=1;j<=ans&&p[j]*i<=n;j++){
			v[i*p[j]]=true;
			if(i%p[j]==0){
				break;
			}
		}
	}
	while(q--){
		cin>>x;
		cout<<p[x]<<'\n';
	}
	return 0;
}

只是把只调用一次的函数内的内容放到了外面,为什么会差这么多?

2024/6/10 11:45
加载中...