埃拉托斯特尼筛法
快速查找素数
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在给你一个正整数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
来源- 经典题 上传者
- 路过这
- 思路参见wiki的解释。复杂度是接近线性的。
#include<stdio.h> #include<string.h> #define MAX 2000001 int all[MAX]; int N,i,j,s; int main() {memset(all,1,sizeof(all));for(i=2;i<=MAX;i++)if(all[i])for(j=i+i;j<=MAX;j+=i)all[j]=0;while(scanf("%d",&N),N){for(i=2;i<=N;i++)if(all[i])printf("%d ",i);printf("\n");}return 0; }