朴素筛法和埃氏筛法
- 朴素筛法时间复杂度为O(nlogn)
- 埃氏筛法优化后,时间复杂度为O(nloglogn),和O(n)几乎持平
例题
给定一个正整数 n ,请你求出 1∼n 中质数的个数。
输入格式
共一行,包含整数 n 。
输出格式
共一行,包含一个整数,表示 1∼n 中质数的个数。
数据范围
1≤n≤106
输入样例:
8
输出样例:
4
朴素筛法
思想:从2开始枚举到n,如果是素数就让计数器加1,并且用当前的数i筛掉所有当前数i的倍数(比如2的倍数4,8,12…都筛掉,因为他们肯定不是素数)
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int st[N],prime[N],cnt;
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])prime[cnt++]=i;
for(int j=2*i