- 筛质数
埃及筛法:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int n,cnt=0;bool p[1000010];memset(p,true,sizeof(p));cin>>n;for (int i=1;i<=n;i++){if (p[i]==true) cnt++;for (int j = i+i;j<=n;j++){p[j] = false;}}cout<<cnt;
}
欧拉筛法:(更快)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int n,cnt=0;bool p[1000010];int pr[1000010]={0};memset(p,true,sizeof(p));cin>>n;for (int i=2;i<=n;i++){if (p[i]==true) pr[cnt++] = i;for (int j = 0;pr[j]<=n/i;j++)//保证不超过n{p[pr[j]*i] = false;if (i%pr[j]==0) break;//保证最小质因子}}cout<<cnt;
}