Find all prime number upto n-Sieve of Eratosthenes【1月19日学习笔记】

点击查看代码
//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);
}

posted @ 2024-01-19 15:23  bituion  阅读(17)  评论(0)    收藏  举报