素数筛

模板

Primel1是常用的素数筛模板,Primer2能在线性时间筛选出素数。
n是素数的范围,p数组保存的是素数。

#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 25600000;
bool a[N];
int p[N];
int n;

void Prime1() {
    memset(a, 0, n * sizeof a[0]);
    int num = 0, i, j;
    for(i = 2; i < n; ++i) if(!a[i]) {
        p[num++] = i;
        for(j = i+i; j < n; j +=i) {
            a[j] = 1;
        }
    }

}

void Prime2() {
    memset(a, 0, n*sizeof a[0]);
    int num = 0, i, j;
    for(i = 2; i < n; ++i) {
        if(!(a[i])) p[num++] = i;
        for(j = 0; (j<num && i*p[j]<n); ++j) {
            a[i*p[j]] = 1;
            if(!(i%p[j])) break;
        }
    }
}
int main(){
    n = 100;
    Prime2();
}

results matching ""

    No results matching ""