埃氏筛法,筛选n以内素数的个数 及map用法·
给定整数n,请问n以内有多少个素数 ?
eg: 输入: 11
输出: 5(2,3,5,7,11共5个)
1 //埃氏筛法,筛选n以内素数的个数 2 #include<iostream> 3 //#include<map> 4 #define MAX_N 1000000 5 int prime[MAX_N] ; 6 bool is_prime[MAX_N+1] ; 7 8 using namespace std ; 9 //map<int,int> m; 10 //map<int,int>::iterator ite ; 11 int main() 12 { 13 int sieve(int n) ; 14 15 int n ; 16 scanf("%d", &n) ; 17 18 19 printf(" %d ",sieve(n) ) ; 20 21 //printf("%d\n",m.size()) ; 22 return 0 ; 23 } 24 25 int sieve(int n) 26 { 27 int p = 0 ; //key = 0 ; 28 29 for(int i=0; i<=n; i++) 30 is_prime[i] = true ; 31 32 is_prime[0] = is_prime[1] = false ; 33 34 for(int i=2; i<=n; i++) 35 { 36 if(is_prime[i]) 37 { 38 prime[p++] = i ; 39 //m.insert(make_pair(key++, i)) ; 40 printf("%d ",i) ; 41 for(int j=2*i; j<=n; j+=i) 42 is_prime[j] = false ; 43 } 44 } 45 return p ; 46 }