//正确程序
#include "iostream"
using namespace std;
#define N 10000
int main()
{
bool x[N + 1] = { false };
int count[N + 1] = { 0 };
int prime[N + 1] = { 0 }; //?
int len = 0;
for (int i = 2; i <= N; i++)
{
if (!x[i])
{
prime[len++] = i;
for (int j = i + i; j <= N; j += i)
x[j] = true;
}
}
for (int i = 0; i < N; i++)
cout << prime[i] << endl;
}
//错误程序
#include "iostream"
using namespace std;
#define N 10000
int main()
{
bool x[N + 1] = { true };
int count[N + 1] = { 0 };
int prime[N + 1] = { 0 }; //?
int len = 0;
for (int i = 2; i <= N; i++)
{
if (x[i])
{
prime[len++] = i;
for (int j = i + i; j <= N; j += i)
x[j] = false;
}
}
for (int i = 0; i < N; i++)
cout << prime[i] << endl;
}
我认为两个程序的逻辑思想是完全一样的,但是就是在初始化x[N+1]数组的是否,是初始化为false还是true时,出现了错误。我没有想明白这是什么原因,恳请赐教