筛素数

一:埃拉托斯尼斯筛法.

 1 #define maxn 1000000
 2 bool isPrime[maxn+10]={true};
 3 int prime[maxn],k=0;
 4 void selPrime()
 5 {
 6        isPrime[0]=isPrime[1]=false;
 7        for(int i=2;i<=maxn;i++)
 8        {
 9                if(isPrime[i])
10                 {
11                        prime[k++]=i;
12                        for(int j=i*i;j<=maxn;j+=i)
13                        isPrime[j]=false;
14                  }
15         }
16 }
View Code

 

二:6N(+-)1法.

 1 #define maxn 1000
 2 int prime[maxn+10],k=0;
 3 bool isPrime(int k)
 4 {
 5     if(k%2==0)return false;
 6     for(int i=3;i*i<=k;i+=2)
 7     if(!(k%i))return false;
 8     return true;
 9 }
10 void doPrime()
11 {
12     prime[k++]=2;
13     prime[k++]=3;
14     for(int i=3;i<=maxn;i+=3)
15     for(int j=0;j<2;j++)
16     if(isPrime(2*(i+j)-1))
17     prime[k++]=2*(i+j)-1;
18 }
View Code

 

posted @ 2013-09-05 10:10  EtheGreat  阅读(165)  评论(0编辑  收藏  举报