素数筛选
bool prime[N]; int p[N]; int k=0; void isprine() { long long I,j; memset(prime,1,sizeof(prime)); for(i=2;i<N;i++) { if(prime[i]) { p[k++]=i; for(j=i*i;j<N;j+=i) prime[j]=false; } } }
线性筛法:
void makePrime() { memset(isPrime,1,sizeof(isPrime)); memset(prime,0,sizeof(prime)); for(int i=2;i<=N;i++) { if(isPrime[i]) prime[total++]=i; for(int j=0;j<total&&i*prime[j]<=N;j++){ isPrime[i*prime[j]]=false; if(i%prime[j]==0) break; } } }
N在10^6之内 或者更大