素数筛选
(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