疑惑

P3383 【模板】线性筛素数

yfl20130101 @ 2024-06-10 11:45:55

已 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;
}

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


by liyixin0514 @ 2024-06-10 11:48:14

@yfl20130101

int primes(int n) 这个函数的类型应该是 void 吧。


by 残阳如血 @ 2024-06-10 11:55:35

@yfl20130101 void


by yfl20130101 @ 2024-06-10 12:34:27

@txppdd @残阳如血 知道了。谢谢大佬%%%。


by yfl20130101 @ 2024-06-10 12:34:57

此贴结。


|