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
就够了,而且只用开