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
筛选素数表并记录素数个数。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #define MAX 1000000 #define inf 0x3f3f3f3f using namespace std; bool isprime[MAX] = {true,true,false,false}; int prime_num[MAX]; int c; int main() { for(int i = 2;i < MAX;i ++) {///筛选素数 并记录小于等于i的素数个数 if(!isprime[i]) { c ++; if(i < 1000) for(int j = i * i;j < MAX;j += i) { isprime[j] = true; } } prime_num[i] = c; } int n; while(~scanf("%d",&n)) { printf("%d ",prime_num[n]); } }