#includebitsstdc++husing namespace std;int nqprime100000010;bool mark100000010;long long ans;int read int x=0f=1; char ch=getchar; whilech0ch9 ifch==- f=-1; ch=getchar; whilech=0&&ch
修改代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000010;
int n,q,prime[maxn];
bool mark[maxn];
int tot;
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
void olprim(int n)
{
tot=0;
memset(mark, false, sizeof(mark));
for(int i=2;i<=n;i++)
{
if(!mark[i]) prime[++tot]=i;
for(int j=1;j<=tot;j++)
{
if(i*prime[j]>n) break;
mark[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
n=read(),q=read();
olprim(n);
while(q--)
{
int k=read();
printf("%d\n",prime[k]);
}
return 0;
}
修改后的代码中,增加了一个const int maxn常量用于定义数组的最大长度,避免超出数组大小。同时,在olprim函数中增加了一个memset函数,用于初始化mark数组
原文地址: https://www.cveoy.top/t/topic/iRMR 著作权归作者所有。请勿转载和采集!