素数筛选法
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1000;
int prime[N];
int n;
void Init1() //埃式筛法(埃拉托斯特尼筛法)
{
for(int i=2;i<n;i++)
prime[i]=true;
for(int i=2;i<n;i++)
{
if(prime[i])
{
for(int j=2*i;j<n;j+=i)
prime[i]=false;
}
}
}
int p[N];
void Init2() //线性筛法
{
int k=0;
for(int i=2;i<n;i++)
prime[i]=1;
for(int i=2;i<n;i++)
{
if(prime[i])
p[k++]=i;
for(int j=0;j<k && i*p[j]<n;j++)
{
prime[i*p[j]]=false;
if(i%p[j]==0) //保证每个合数被他最小的质因数筛去
break;
}
}
}
int main()
{
while(~scanf("%d",&n))
{
int sum=0;
// Init1();
Init2();
for(int i=2;i<n;i++)
{
if(prime[i])
sum++;
}
printf("%d\n",sum);
}
return 0;
}