查找素数编程

来源:互联网 发布:蔬菜报价软件 编辑:程序博客网 时间:2024/06/14 07:59
描述
现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。
输入
给出一个正整数数N(N<=2000000)
但N为0时结束程序。
测试数据不超过100组
输出
将2~N范围内所有的素数输出。两个数之间用空格隔开
样例输入
510110
样例输出
2 3 52 3 5 72 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 
结果时间内存语言Accept9048052c
代码
#include<stdio.h>#define N 2000001int 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;}