神奇现象求解答
查看原帖
神奇现象求解答
687685
not_so_littlekayen楼主2024/8/5 22:55
#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;

的位置

所以为什么会出现这样子的情况,求解答

2024/8/5 22:55
加载中...