题目描述
使用欧拉线性筛法输出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;
}