题目:筛选1到n之间的素数
思路:从2开始遍历,找到素数,将所有素数的倍数标记为合数(素数的倍数必定不是素数)
时间复杂度:O(nloglogn)
#include <iostream>
#define maxn 100000+10
using namespace std;
int flag[maxn];//0为素数,1为合数
int sushu[maxn];
int main()
{
int n,Count=0;//Count为指针
cin>>n;
for(int i=2;i<=n;i++)
{
if(!flag[i])//如果这个数为素数
{
sushu[++Count]=i;
for(int j=2*i;j<=n;j+=i)//将素数的倍数标记为合数
{
flag[j]=1;
}
}
}
for(int i=1;i<=Count;i++)
{
cout<<sushu[i]<<' ';
}
cout<<endl;
cout<<Count<<endl;//素数个数
return 0;
}