线性素数筛

#include <cstdio>
#define N 100001

int n;
bool mark[N];
int p,prime[N];

void get_prime(){    
    for(int i = 2; i <= N; ++i){
        if(!mark[i]) prime[++p] = i;
        for(int j = 1; j <= p; ++j){
            if(i * prime[j] > N) break;
            mark[i * prime[j]] = true;
            if(i % prime[j] == 0) break;
        }
    }
}

int main(){
    printf("请输入 n(1 <= n <= 100001) = ");
    scanf("%d", &n); 
    get_prime();
    for(int i = 1; prime[i] <= n && i <= p; ++i) printf("%d ",prime[i]);    
    return 0;
} 

 

posted @ 2019-05-15 21:43  探险家_H  阅读(105)  评论(0编辑  收藏  举报