素数筛子算法
描述
现在给你一个正整数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("\n"); 36 } 37 38 return 0; 39 }