朴素筛法就是用两个数组book数组来存储第i个数是否为素数,不是素数那么book[i]=1。primes数组存储从1~n的所有的素数。基本思路是 从2开始枚举枚举到n 开始筛掉2的倍数,再筛掉3的倍数,再筛掉4的倍数,再筛掉5的倍数,.......剩下的数就是素数。时间复杂度O(nlogn)
#include<bits/stdc++.h>
using namespace std;
int n,cnt=0;
int prime[1000010],book[1000010];
void primes()
{
for(int i=2;i<=n;i++)
{
if(book[i]==0)prime[cnt++]=i;
for(int j=i+i;j<=n;j+=i)
{
book[j]=1;
}
}
}
int main()
{
cin>>n;
primes();
cout<<cnt<<endl;
return 0;
}
埃式筛法是在朴素的筛法上加了优化,不需要把2~n每个数都枚举出来,只需要每次用素数来筛。时间复杂度O(nloglogn)