描述 现在给你一个正整数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
-
个人理解
-
之前用判断素数的方法提交老是超时,所以把从2开始的、某一范围内的正整数从小到大顺序排列, 选择最小的数是素数,然后去掉它的倍数。
-
如: 2 3 4 5 6 7 8 9 中2最小,是素数,去掉2的倍数,余下的数是:3 5 7 9
-
剩下的数中3最小,是素数,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为: 2 3 5 7
-
结果 时间 内存 语言 Accept 904 8052 c
-
代码
-
#include<stdio.h> #define N 2000001 int a[N],i,j; int main(){ int m; for(i = 2;i <= 2000000;i++){ if(a[i]==0) for(j = i + i;j <= 2000000;j += i) a[j] = 1; } while(scanf("%d",&m) && m!=0){ for(i = 2;i <= m;i++){ if(a[i] == 0){ printf("%d ",i); } } printf("\n"); } return 0; }