素数筛选

(1)复杂度O(n)

 

 1 long Prime(long n)
 2 
 3 {memset(a,0,sizeof(a));
 4 
 5 long i,j,num;
 6 
 7 num=0;
 8 
 9 for(i=2;i<=n;i++)
10 
11 {if(!a[i]) p[num++]=i;
12 
13 for(j=0;((j<num)&&(p[j]*i<=n));j++)
14 
15 {a[p[j]*i]=1;
16 
17 if(i%p[j]==0) break;
18 
19 }
20 
21 }
22 
23 return num-1;//p数组中存贮的最后一个素数的下标;
24 
25 }

 

 

(2)复杂度O(nlgn)

 

 1 long Prime(long n)
 2 
 3 {memset(a,0,sizeof(a));
 4 
 5 long i,j,num;
 6 
 7 num=0;
 8 
 9 for(i=2;i<=n;i++)
10 
11 if(!a[i])
12 
13 {
14 
15 p[num++]=i;
16 
17 for(j=i*i;j<=n;j+=i)
18 
19 a[j]=1;
20 
21 }
22 
23 return num-1;//p数组中存贮的最后一个素数的下标;
24 
25 }
26 
27  
posted @ 2012-05-30 22:00  cseriscser  阅读(347)  评论(0编辑  收藏  举报