1. 程式人生 > >埃式篩法——快速篩選n以內的素數

埃式篩法——快速篩選n以內的素數

/*
埃氏篩法(快速篩選n以內素數的個數)
*/
#include <bits/stdc++.h>

using namespace std;

const int N = 1e7;

int prime[N];//第i個素數
bool is_prime[N];//true表示i是素數

int Ans(int n){
    int i, j, k;
    k = 0;
    memset(is_prime, true, sizeof(is_prime));
    is_prime[0] = is_prime[1] = false;//預處理0和1,0和1不是素數
    for(i = 2; i <= n; i++){
        if
(is_prime[i]){///當前i是一個素數,則他的倍數皆不是素數 prime[k++] = i;//計算素數的個數,同時記錄素數本身 for(j = 2*i; j <= n; j += i){//篩掉素數的倍數的數 is_prime[j] = false; } } } return k;//返回n以內素數的個數 } int main(){ int n, i, ans; while(cin >> n){ ans = Ans(n); cout
<< ans << endl;//輸出素數的個數 for(i = 0; i < ans; i++){ cout << prime[i] << endl;//輸出素數本身 } } return 0; }