欧拉筛写法
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 10000000
vector<int>prime;
vector<bool>vis;
void OLA(int n)
{
prime.resize(n + 1);
vis.resize(n + 1);
for (int i = 1; i <= n; i++)
vis[i] = true;
vis[1] = false;
for (int i = 2; i <= n; i++)
{
if (vis[i]) prime[++prime[0]] = i;
for (int j = 1; j <= prime[0] && prime[j] * i <= n; j++)
{
vis[prime[j] * i] = false;
if (i % prime[j] == 0) break;
}
}
}
int main()
{
int n;
cin >> n;
OLA(n);
for (int i = 1; i <= prime[0]; i++)
cout << prime[i] << endl;
return 0;
}
埃氏筛写法
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 10000000
bool vis2[MAXN+1];
void AISHI(int n)
{
for (int i = 1; i <= n; i++)
vis2[i] = true;
vis2[1] = false;
for (int i = 1; i <= n; i++)
{
if (!vis2[i]) continue;
for (int j = i; j * i <= n; j++)
vis2[j * i] = false;
}
for (int i = 1; i <= n; i++)
if (vis2[i]) cout << i << endl;
}
int main()
{
int n;
cin >> n;
AISHI(n);
return 0;
}