一:埃拉托斯尼斯筛法.
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 }
二: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 }