素数筛子算法

描述

现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。

输入

给出一个正整数数N(N<=2000000)
但N为0时结束程序。
测试数据不超过100组

输出

将2~N范围内所有的素数输出。两个数之间用空格隔开

样例输入

5
10
11
0

样例输出

2 3 5
2 3 5 7
2 3 5 7 11

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #define N 2000001
 5   
 6 int main(){
 7     int i;
 8     int j;
 9     char flag[N];
10     memset(flag,'0',N);
11     flag[0]='1';
12     flag[1]='1';
13   
14     for(i=2;i<=sqrt(N);i++){
15         if(flag[i]=='0'){
16             for(j=i*i;j<N;j+=i){
17                 flag[j]='1';
18             }
19         }
20     }
21   
22     int number;
23       
24     while(1){
25         scanf("%d",&number);
26   
27         if(number==0)
28             break;
29   
30         for(i=2;i<=number;i++){
31             if(flag[i]=='0')
32                 printf("%d ",i);
33         }
34               
35         printf("
");
36     }
37   
38     return 0;
39 }
原文地址:https://www.cnblogs.com/zqxLonely/p/4054550.html