筛质数
作者:
risufanple
,
2021-10-02 11:31:05
,
所有人可见
,
阅读 291
#include <cstdio>
#include <iostream>
using namespace std;
const int MAXN = 100010;
int N, prime[MAXN], cnt;
bool tag[MAXN];
void E_prime() //埃拉托尼斯筛法
{
for (int i = 2; i * i < N; i ++)
{
if (tag[i]) continue;
for (int j = i; i * j < N; j ++)
tag[i * j] = 1;
}
cnt = 0;
for (int i = 2; i < N; i ++)
if (!tag[i])
prime[cnt ++] = i;
}
void get_prime() //线性筛
{
cnt = 0;
for (int i = 2; i < N; i ++)
{
if (!tag[i]) prime[cnt ++] = i;
for (int j = 0; j < cnt && prime[j] * i < N; j ++)
{
tag[i * prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
}
int main()
{
cin >> N;
E_prime();
//get_prime();
cout << cnt << endl;
}