质数筛模板

埃氏筛理解与代码模板

#include <iostream>
#include <cstring>
using namespace std;
const int N = 10010;
bool isprime[N];
int n, prime[N], tot;
int Era_prime(int n) {
    tot = 0;
    memset(isprime, true, sizeof(isprime));
    isprime[0] = false;
    isprime[1] = false;
    for(int i = 2; i <= n; i++) {
        if(isprime[i]) {
            prime[tot++] = i;
            for(int j = i * 2; j <= n; j += i) {
                isprime[j] = false;
            }
        }
    }
    return tot;
}
int main() {
    cin >> n;
    cout << "n以内的共有多少质数:" << Era_prime(n) << endl; 
    for(int i = 0; i < tot; i++) {
        cout << prime[i] << " ";
    }
    return 0;
} 

 线性筛

#include <iostream>
#include <cstring>
using namespace std;
const int N = 10010000;
bool isprime[N];
int prime[N];
void Prime(int x) {
    int t = 0;
    memset(isprime, true, sizeof(isprime));
    isprime[0] = false;
    isprime[1] = false;
    for(int i = 2; i <= x; i++) {
        if(isprime[i]) {
            prime[t++] = i;
        }
        for(int j = 0; j < t && prime[j] * i <= x; j++) {
            isprime[prime[j] * i] = false;
            if(i % prime[j] == 0) {
                break;
            }
        }
    }
}
int main() {
    int a, b;
    Prime(N);
    scanf("%d%d", &a, &b); 
    for(int i = a; i <= b; i++) {
        if(isprime[i]) {
            printf("%d\n", i);
        }
    }
    return 0;
}

 

posted @ 2020-07-13 15:58  Captand  阅读(160)  评论(0编辑  收藏  举报