【发布时间】:2023-03-18 07:55:01
【问题描述】:
我正在尝试在 C++ 中生成从 N 到 N_Max 的素数序列。我的方法是使用埃拉托色尼筛法来生成这些素数:
void runEratosthenesSieve(int upperBound) {
int upperBoundSquareRoot = (int)sqrt((double)upperBound);
bool *isComposite = new bool[upperBound + 1];
memset(isComposite, 0, sizeof(bool) * (upperBound + 1));
for (int m = 2; m <= upperBoundSquareRoot; m++) {
if (!isComposite[m]) {
cout << m << " ";
for (int k = m * m; k <= upperBound; k += m)
isComposite[k] = true;
}
}
for (int m = upperBoundSquareRoot; m <= upperBound; m++)
if (!isComposite[m])
cout << m << " ";
delete [] isComposite;
}
但是这个函数通过计算素数 1 到 N 会浪费内存。有没有一个函数会运行得更快并且占用更少的内存?
【问题讨论】:
-
你可能会喜欢我对this question 的回复,它只生成给定范围内的素数。
-
它在 phyton 中,我会尝试翻译,但谢谢!
-
其实不是Python,而是一种伪代码。
标签: c++ primes sieve-of-eratosthenes