Bootstrap

欧拉线性筛

题目描述

使用欧拉线性筛法输出2到n之间的所有整数包括n(2<=n<=10^5)内的所有素数。

输入描述

输入一行包含一个正整数n

输出描述

输出包括一行,包括2到n之间所有的素数,每两个数之间用空格隔开


样例1

输入

10

输出

2 3 5 7

提示

【数据范围】

对于100%的数据,2<=n<=10^5


#include <iostream>
using namespace std;
const int MaxN = 1e5 + 5;
bool isPrime[MaxN];//表示是否为素数  true-非素数  false-素数 
int a[MaxN];//用来保存已经找到的素数
int n, cnt;//记录找到素数个数 
int main()
{
	cin >> n;
	for(int i = 2; i <= n; i++)
	{
		isPrime[i] = true;	
	} 
	for(int i = 2; i <= n; i++)
	{
		if(isPrime[i])
		{
			a[cnt++] = i;
		}
		for(int j = 0; j <= cnt-1 && i*a[j] <= n; j++)
		{
			isPrime[i * a[j]] = false;
			if(i % a[j] == 0) break; 
		}
	}
  	for(int i = 2; i <= n; i++)
	{
		if(isPrime[i])
			cout << i << " ";
	}
 	return 0;
}

;