1.埃氏筛
#include<iostream>
using namespace std;
int a[1010];
bool vis[1010];
int x;
void aishi(int n)
{
for(int i=2;i<=n;i++)
{//如果是素数,存下来并且他的倍数不是素数
if(!vis[i]) a[x++]=i;
for(int j=2;j*i<=n;j++)
{
vis[i*j]=true;
}
}
}
int main()
{
int n;
cin>>n;
aishi(n);
//输出n以内的素数
for(int i=0;i<x;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
2.欧拉筛
#include<iostream>
using namespace std;
int isprime[1010],x;
bool vis[1010];
void oulashai(int n)
{
for(int i=2;i<=n;i++)
{
if(!vis[i]) isprime[x++]=i;
for(int j=0;j<x;j++)
{
if(i*isprime[j]>n) break;
vis[i*isprime[j]]=true;
//这样可以避免埃筛对某一个元素重复标记
if(i%isprime[j]==0) break;
}
}
}
int main()
{
int n;
cin>>n;
oulashai(n);
//输出n以内的素数
for(int i=0;i<x;i++)
{
cout<<isprime[i]<<" ";
}
return 0;
}