埃氏筛
#include<bits/stdc++.h>
using namespace std;
int a[50000005] = {};
int n = 0;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++) a[i] = 1;
for(int i=2; i<=n; i++)
{
if(a[i] == 0) continue;
for(int j=i; j<=n/i; j++)
{
a[i*j] = 0;
}
}
for(int i=2; i<=n; i++)
{
if(a[i]) printf("%d\n", i);
}
return 0;
}
线性筛
#include<bits/stdc++.h>
using namespace std;
int a[50000005] = {};
int prim[50000005] = {}, cnt = 0;
int n = 0;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++) a[i] = 1;
for(int i=2; i<=n; i++)
{
if(a[i]) prim[++cnt] = i;
for(int j=1; j<=cnt; j++)
{
if(i*prim[j] > n) break;
a[i*prim[j]] = 0;
if(i%prim[j] == 0) break;
}
}
for(int i=1; i<=cnt; i++)
printf("%d\n", prim[i]);
return 0;
}