1 const int N=1e6+11; 2 int p[N],pr[N],cnt; 3 void init() 4 { 5 for(int i=2;i<N;i++) 6 { 7 if(!p[i]) pr[++cnt]=i; 8 for(int j=1;j<=cnt&&i*pr[j]<N;j++) 9 { 10 p[i*pr[j]]=1; 11 if(i%pr[j]==0) break; 12 } 13 } 14 }
此时大素数的判定:
int pd(int x){ for(int i=1;pr[i]*pr[i]<=x;i++){ if(x%pr[i]==0) return 0; } return 1; }