漫步编程之林

Something known by a C, C++ & C# Programmer

经典算法——埃拉托斯特尼筛法

一、算法创始人介绍:

埃拉托斯特尼(公元前276—公元前194

埃拉托斯特尼是古希腊著名的数学家、地理学家、天文学家。他先在亚历山大港学习,后又转至雅典。公元前236年,托勒密三世指定他为亚历山大图书馆的图书管理员和馆长。他跟阿基米德是好朋友。埃拉托斯特尼的主要贡献包括:

埃拉托斯特尼筛法:寻找素数的方法。

地理常数测量:日地间距的测量(现在称一个这样的距离为一个天文单位)、地月间距的测量、测量赤道与黄道之间的偏角、地球半径测量等。

精确地图绘制:当时只有托勒密等级的人物能绘出同等级的地图。

二、算法数学原理:

埃拉托斯特尼筛法是快速筛选素数的算法,在处理大量整数是否是素数时有较高的效率。

例:筛选小于n的整数并记录结果。

解:计算sqrt(n)∵对于任意的z<n,若z为合数,不妨设z=a*b,则必有min(a,b)<sqrt(n)

∴所有小于n的合数均可被小于sqrt(n)的整数整除

2开始,依次去除小于n的整数中能被其整除的数,最后剩下的就是素数

三、算法C++代码:

void eratosthens(bool primelist[],int n)

{

    int i,j,k;

    memset(primelist,true,sizeof(primelist));
    primelist[0]=primelist[1]=false;
    for(i=2,k=4;i<=n;i++,k+=i+i-1)
        if(primelist[i])
            for(j=k;j<=n;j+=i)
                primelist[j]=false;

}

阅读更多
文章标签: 算法 c++
个人分类: Algorithm
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

经典算法——埃拉托斯特尼筛法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭