素数筛选

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之内 或者更大

posted @ 2016-09-28 19:52  a_clown_cz  阅读(117)  评论(0)    收藏  举报