埃氏筛法(求n以内有哪些个质数)

核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数。。。以此类推)

#include <bits/stdc++.h>

using namespace std;
#define max_n 1000000

int prime[max_n]={0};
bool is_prime[max_n];

int sieve/*埃氏筛选*/(int n) {
    int p=0;
    memset(is_prime,1,sizeof(is_prime));
    for(int i=2;i<=n;i++) {
        if(is_prime[i]) {
            prime[p]=i;
            p++;
            for(int j=i*2;j<=n;j+=i) {
                is_prime[j]=0;
            }
        }
    }
    return p;
}

int main() {
    int n;
    cin>>n;
    int p=sieve(n);
    for(int i=0;i<p;i++) {
        cout<<prime[i]<<" ";
    }
} 

猜你喜欢

转载自www.cnblogs.com/rtyxxy/p/12075049.html
今日推荐