话不多说,直接开干
题目描述
求 1,2,⋯ ,N1,2,⋯,N 中素数的个数。
输入格式
一行一个整数 NN。
输出格式
一行一个整数,表示素数的个数。
输入数据 1
10
输出数据 1
4
提示
对于 40%40% 的数据,1≤N≤1061≤N≤106。
对于 80%80% 的数据,1≤N≤1071≤N≤107。
对于 100%100% 的数据,1≤N≤1081≤N≤108。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e8+10;
bool isprime[MAXN];
int prime[MAXN];
int n;
int cnt=0;
void euler()
{
memset(isprime,1,sizeof(isprime));
isprime[1]=false;
for(int i=2;i<=n;i++)
{
if(isprime[i]) prime[++cnt]=i;
for(int j=1;j<=cnt && i*prime[j]<=n;j++)
{
isprime[i*prime[j]]=false;
if(i%prime[j]==0) break;
}
}
}
int main()
{
cin>>n;
euler();
cout<<cnt;
}