筛法求素数模板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

原文地址:https://www.cnblogs.com/savennist/p/12250411.html