c++ - 如何正确识别具有布尔值的动态数组?
问题描述
这段代码是为了找到一定范围内的素数。我使用了 Eratosthenes 的算法。似乎我的动态数组的范围是错误的。因为当我输入 50 时,49 在素数集中,当我输入 30 时,25 仍在素数集中。
我已经检查了 for 循环。应该没有问题。
void Eratosthenes(int n)
{
bool* prime;
prime = new bool[n+1];
memset(prime, true, sizeof(prime));
for (int p = 2; p * p <= n; p++)
{
if (prime[p] == true)
{
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
for (int p = 2; p <= n; p++)
if (prime[p])
cout << p << " ";
delete[] prime;
}
int main()
{
int n;
cout << "enter a interger " << endl;
cin >> n;
Eratosthenes(n);
return 0;
}
解决方案
您可能需要更正应初始化的元素数量:
memset(prime, true, sizeof(*prime)*(n+1));