为啥本地小熊猫能用切能过样例但是交上去CE

P3383 【模板】线性筛素数

ETO_listener @ 2024-09-22 11:19:27

#include<bits/stdc++.h>
#define int long long
using namespace std;
int prime[100000010];int cnt=0;
bool vis[100000010]={true,true};
void getprime(int n) 
{
    for (int i=2;i<=n;i++) 
    {
        if (!vis[i]) 
        {
            prime[cnt++] = i;
        }
        for (int j=0;j<cnt&&i*prime[j]<=n;j++) 
        {
            vis[i*prime[j]]=true;
            if (i%prime[j]==0) 
            {
                break;
            }
        }
    }
}
signed main()
{
    std::ios::sync_with_stdio(0);
    int n,m;
    cin>>n>>m;
    getprime(n);
    int x;
    for(int i=0;i<m;i++)
    {
        cin>>x;
        cout<<prime[x-1]<<endl;
    }
}

by cj180202 @ 2024-09-22 11:22:55

列表初始化在数组过大是容易CE


by nzlys04 @ 2024-10-03 10:06:15


1.两个1e8的long long 数组会爆空间
2.好像是gcc编译器的问题,bool数组初始化那报错了
以下是改后AC代码
#include<bits/stdc++.h>

using namespace std;
bool prime[100000010];int cnt=0;
bool vis[100000010];
void getprime(int n) 
{
    for (int i=2;i<=n;i++) 
    {
        if (!vis[i]) 
        {
            prime[cnt++] = i;
        }
        for (int j=0;j<cnt&&i*prime[j]<=n;j++) 
        {
            vis[i*prime[j]]=true;
            if (i%prime[j]==0) 
            {
                break;
            }
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(0);
    int n,m;
    cin>>n>>m;
    getprime(n);
    int x;
    for(int i=0;i<m;i++)
    {
        cin>>x;
        cout<<prime[x-1]<<endl;
    }
}```

by Little_x_starTYJ @ 2024-10-04 10:46:28

@ETO_listener 哥,int 就够了,而且只用开 6\times 10^6,具体看题解。


|