点击查看代码
//Find all prime number upto n-Sieve of Eratosthenes
#include<iostream>
#include<cmath>
using namespace std;
void findprimes(int n) {
int* primes = new int[n+1];
for (int i = 0; i <= n; i++)
primes[i] = 1;//先假定全是素数
primes[0] = 0;
primes[1] = 0;//0和1不是素数
for (int i = 2; i <= sqrt(n); i++) {//只需用根号n及之前的数筛选
if (primes[i] == 1) {//2是素数,从2开始筛选//问题:显示读取无效数据
for (int j = 2; i * j <= n; j++)
primes[i * j] = 0;
}//去除素数的倍数
}
for (int i = 0; i <= n; i++) {
if (primes[i] == 1)
cout << i << " ";
}//打印全部素数
cout << endl;
delete[]primes;//删除动态内存
}//时间复杂度:O(nloglogn)
int main() {
int n;
cin >> n;
findprimes(n);
}