您的位置:首页 > 理论基础 > 数据结构算法

30. 数据结构笔记之三十数组之厄拉多塞筛

2017-09-20 21:29 295 查看
30. 数据结构笔记之三十数组之厄拉多塞筛
           “勤劳远比黄金可贵。 --
萨迪”


1.  厄拉多塞 

厄拉多塞是一位古希腊数学家,他在寻找素数时,采用了一种与众不同的方法:先将2-N的各数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 N的素数。

PS:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。

2.  代码实现

运行如下:

代码中N表示求多少数内的素数。

2.1      源码

#include"stdio.h"
#include"malloc.h"
 
#defineN10000
void main()
{
    inti,j,a[N+1];
 
           //初始化为1
    for(i=2;i<N+1;i++)
       a[i]=1;
 
    for(i=2;i<N+1;i++)
        if(a[i])
            for(j=i;j<=N/i;j++)a[i*j]=0;
 
           //输出
    for(i=2;i<N;i++)
        if(a[i])
           printf("%4d ",i);
       printf("\n");
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: