not_so_littlekayen @ 2024-08-05 22:55:00
#include <bits/stdc++.h>
using namespace std;
#define Max 1000005
int p[Max], n, q, cnt;
bool prime[100*Max];
void xxs()
{
for(int i = 2;i <= n;i++)prime[i] = 1;
for(int i = 2;i <= n;i++)
{
if(prime[i])
p[++cnt] = i;
for(int j = 1;j <= cnt&&i*p[j] <= n;j++)
{
prime[i*p[j]] = 0;
if(i%p[j] == 0)break;
}
}
}
int main()
{
cin >> n >> q;
xxs();
while(q--)
{
int x;
scanf("%d", &x);
printf("%d\n", p[x]);
}
return 0;
}
以及
#include <bits/stdc++.h>
using namespace std;
#define Max 1000005
bool prime[100*Max];
int p[Max], n, q, cnt;
void xxs()
{
for(int i = 2;i <= n;i++)prime[i] = 1;
for(int i = 2;i <= n;i++)
{
if(prime[i])
p[++cnt] = i;
for(int j = 1;j <= cnt&&i*p[j] <= n;j++)
{
prime[i*p[j]] = 0;
if(i%p[j] == 0)break;
}
}
}
int main()
{
cin >> n >> q;
xxs();
while(q--)
{
int x;
scanf("%d", &x);
printf("%d\n", p[x]);
}
return 0;
}
上面的是RE,下面的是AC,仅仅因为调换了
bool prime[100*Max];
和
int p[Max], n, q, cnt;
的位置
所以为什么会出现这样子的情况,求解答
by tzl_Dedicatus545 @ 2024-08-05 22:56:03
@not_so_littlekayen 因为你数组越界了。。。
by not_so_littlekayen @ 2024-08-05 22:56:42
@tzl_Dedicatus545 where?
by tzl_Dedicatus545 @ 2024-08-05 22:56:59
@not_so_littlekayen
by tzl_Dedicatus545 @ 2024-08-05 22:57:26
@not_so_littlekayen int p[Max]
这里。
by not_so_littlekayen @ 2024-08-05 22:58:15
@tzl_Dedicatus545 知道了,谢谢