Write a program which reads an integer n and prints the number of prime numbers which are less than or equal to n. A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself. For example, the first four prime numbers are: 2, 3, 5 and 7.
Input
Input consists of several datasets. Each dataset has an integer n (1 ≤ n ≤ 999,999) in a line.
The number of datasets is less than or equal to 30.
Output
For each dataset, prints the number of prime numbers.
Sample Input
10 3 11
Output for the Sample Input
4 2 5
题目大意:求出1~n的质数个数。
方法:打表,埃氏筛。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 1000000
using namespace std;
int n,m;
int prime(int n)
{
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
int vis[N]; //是否已经被访问过,访问过就是素数
int p[N]; //存n之前的素数个数
int main()
{
int m=sqrt(N);
for(int i=2;i<=m;i++)
{
if(!vis[i])
{
for(int j=i*i;j<=N;j+=i)
vis[j]=1;
}
}
for(int i=2;i<=N;i++)
{
p[i]=p[i-1];
if(!vis[i]) p[i]++;
}
while(cin>>n)
{
cout<<p[n]<<endl;
}
return 0;
}