关闭

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

2386人阅读 评论(0) 收藏 举报

一、算法创始人介绍:

埃拉托斯特尼(公元前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;

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4530次
    • 积分:63
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档