【发布时间】:2017-11-26 15:13:23
【问题描述】:
我正在尝试生成多达 10 亿个素数。此代码在调试模式下工作正常,但在发布模式下,它在 2 3 后崩溃。有人可以在这里提供帮助吗?
void SieveOfEratosthenes(size_t n)
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as true. A value in prime[i] will
// finally be false if i is Not a prime, else true.
bool* prime = new bool[1000000000];
memset(prime, true, sizeof(prime));
for (size_t p = 2; p*p <= n; p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == true)
{
// Update all multiples of p
for (size_t i = p * 2; i <= n; i += p)
prime[i] = false;
}
}
// Prsize_t all prime numbers
for (size_t p = 2; p <= n; p++)
if (prime[p])
cout << p << " ";
}
int main()
{
size_t n = 1000000000;
cout << "Following are the prime numbers smaller "
<< " than or equal to " << n << endl;
SieveOfEratosthenes(n);
getchar();
return 0;
}
【问题讨论】:
-
它到底是在哪里崩溃的?错误是什么?有关如何提出好问题的详细信息,请参阅How to Ask。
-
memset(prime, true, sizeof(prime));没有做你认为它做的事情,并使你的代码一团糟。您应该阅读一本好的 C++ 书籍。 -
您可以使用
std::vector<bool> prime(n, true);并一步完成初始化,而不是摆弄 C 函数。