用筛法求N之内的素数。(1<=N<=10000000)
时间: 2024-02-25 12:52:12 浏览: 117
好的,以下是用筛法求N之内的素数的C++代码,时间复杂度为O(NloglogN):
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 10000005;
bool isPrime[MAXN]; // 标记数组,记录每个数字是否为素数
int main() {
int n;
cin >> n;
// 初始化,假设所有数字都是素数
memset(isPrime, true, sizeof(isPrime));
// 从2开始枚举,找到所有素数
for (int i = 2; i <= n; i++) {
if (isPrime[i]) { // 如果i是素数,就把i的倍数都标记为非素数
for (int j = 2 * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
// 输出所有素数
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
```
这段代码使用了一个布尔型数组isPrime,用来标记每个数字是否为素数。首先将所有数字都标记为素数,然后从2开始枚举,如果某个数字i是素数,就将它的倍数2i、3i、4i……都标记为非素数。最后输出所有标记为素数的数字即可。
阅读全文