首页 > 代码库 > 埃氏筛选 - 素数的个数

埃氏筛选 - 素数的个数

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int maxn = 1000000 + 200;int prime[maxn];          //第i个素数bool is_prime[maxn + 1];  //is_prime[i]位true, 表示i是素数 void solve();int sieve(int n);//返回n以内素数的个数 int sieve(int n){    int p = 0;    for (int i = 0; i <= n; i++) is_prime[i] = true;      is_prime[0] = is_prime[1] = true;         for (int i = 2; i <= n; i++) {        if (is_prime[i]) {          //是素数             prime[p++] = i;  //            cout << i << " ";     //输出素数(每次剩余的最小数字是i,i就是素数)            for (int j = 2*i; j <= n; j += i) is_prime[j] = false;  //将i的倍数全部划去         }    }    return p;}void solve(){    int n;    scanf("%d", &n);    cout << sieve(n) << endl;}int main(){    solve();        return 0;} 

埃氏筛法的复杂度是O(nloglogn)

 

埃氏筛选 - 素数的个数