蒟蒻求助
查看原帖
蒟蒻求助
95848
xqc1368楼主2023/11/24 15:39

同样一段意思的代码为什么这样写就能过

#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;

vector<int> prime; //记录比i小的所有素数
void get_prime(int n)
{
    vector<bool> mark(n+1);
    //建立一个长度为n+1的动态数组用于标记是否不为素数
    //初始化为0,默认全部为素数;
    mark[1]=1;//1不是素数
    for(int i=2;i<=n;i++)
    {
        if(mark[i]==0)prime.push_back(i);
        for(auto j:prime)
        {
            if((long long)j*i>n)break;
            mark[i*j]=1;
            if(i%j==0)break;
        }
    }
    return;
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int n,q;
    cin>>n>>q;
    int question;
    get_prime(n);
    while(q--)
    {
        cin>>question;
        cout<<prime[question-1]<<"\n";
    }
    return 0;
}

而这样写只有60

#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;
vector<bool> mark(100000005);
//建立一个长度为n+1的动态数组用于标记是否不为素数
//初始化为0,默认全部为素数;
vector<int> prime; //记录比i小的所有素数
void get_prime(int n)
{
    mark[1]=1;//1不是素数
    for(int i=2;i<=n;i++)
    {
        if(mark[i]==0)prime.push_back(i);
        for(auto j:prime)
        {
            if(j*i>n)break;
            mark[i*j]=1;
            if(i%j==0)break;
        }
    }
    return;
}
signed main()
{
    int n,q;
    std::ios::sync_with_stdio(0);
    cin>>n>>q;
    int question;
    get_prime(n);
    for(int i=0;i<q;i++)
    {
        cin>>question;
        cout<<prime[question-1]<<endl;
    }
    return 0;
}

(以上两段代码理论上只有输入部分有点差异吧)

2023/11/24 15:39
加载中...