筛法求素数模板1
基础知识,没什么好说的,直接上代码!
1 const int maxn = 1e8; 2 int prime[maxn+5]; 3 int len; 4 5 int initial_prime() 6 { 7 memset(prime,0,sizeof(prime)); 8 prime[0]=prime[1]=1; 9 for(int i=2;i<=sqrt(maxn);i++) 10 { 11 if(prime[i])continue; 12 for(int k=i;k*i<=maxn;k++)prime[k*i]=1; 13 } 14 int cur=0; 15 for(int i=2;i<=maxn;i++) 16 { 17 if(prime[i]==0)prime[cur++]=i; 18 } 19 len=cur; 20 return 0; 21 }
经过上述代码计算,对于前i个正整数内,存在的素数的个数如下:
100->25
1000->168
10000->1229
100000->9592
1000000->78498
10000000->664579
100000000->5761455