族谱网 头条 人物百科

埃拉托斯特尼筛法

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:500
转发:0
评论:0
算式给出要筛数值的范围n,找出n{displaystyle{sqrt{n}}}以内的素数p1,p2,……-->,pk{displaystylep_{1},p_{2},dots,p_{k}

算式

给出要筛数值的范围n,找出n{\displaystyle {\sqrt {n}}}以内的素数p1,p2,… … -->,pk{\displaystyle p_{1},p_{2},\dots ,p_{k}}。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个素数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个素数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。

步骤

埃拉托斯特尼筛法

详细列出算法如下:

列出2以后的所有序列:

标出序列中的第一个质数,也就是2,序列变成:

将剩下序列中,划摽2的倍数(用红色标出),序列变成:

如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是质数,否则回到第二步。

本例中,因为25大于2的平方,我们返回第二步:

剩下的序列中第一个质数是3,将主序列中3的倍数划出(红色),主序列变成:

我们得到的质数有:2,3

25仍然大于3的平方,所以我们还要返回第二步:

现在序列中第一个质数是5,同样将序列中5的倍数划出,主序列成了:

我们得到的质数有:2 3 5 。

因为25等于5的平方,跳出循环.

结论:去掉红色的数字,2到25之间的质数是:2 3 5 7 11 13 17 19 23。

算法

埃拉托斯特尼筛法,可以用以下的伪代码来表示:

以上算法可以得到小于等于n的所有素数,它的复杂度是O(n log log n)。

程式代码

Python 3.6

deferatosthenes(n):P=[iforiinrange(2,n+1)]p=0whileTrue:foriinP[p+1:]:ifi%P[p]==0:P.remove(i)ifP[p]**2>=P[-1]:breakp+=1returnPif__name__=="__main__":print(eratosthenes(120))

C++

#include#include//std::remove_if#include//std::iotastd::vectoreratosthenes(intmax){std::vectorvi(max+1);//0, 1, 2, ..., maxstd::iota(vi.begin(),vi.end(),0);if(max>=2){intprime=2;while(prime*prime<=max){//2 to sqrt(max)for(size_tindex=prime*2;index<vi.size();index+=prime){vi[index]=0;//Rule out this number.}for(prime++;prime*prime0){break;//Jump to next non-zero.}}}}vi.erase(std::remove_if(vi.begin(),vi.end(),[](inti)->bool{returni<=1;}),vi.end());//Remove all zeros and the one.returnvi;}

计算分析

算法复杂度

参见

卢卡斯-莱默检验法

米勒-拉宾检验

试除法

费马素性检验

孪生素数

三胞胎素数

四胞胎素数

素数判定法则

表兄弟素数

六素数

X²+1素数

参考文献

Κοσκινον Ερατοσθενους or, The Sieve of Eratosthenes. Being an Account of His Method of Finding All the Prime Numbers, by the Rev. Samuel Horsley, F. R. S., Philosophical Transactions (1683-1775), Vol. 62. (1772), pp. 327-347.


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 埃拉托斯特尼
生平他先在亚历山大港学习,又待在雅典几年。前236年,托勒密三世指定他为亚历山大图书馆的图书管理员和馆长。他跟阿基米德是好友。约前255年,发明浑仪,一直用到公元17世纪。约前240年,他根据亚历山大港与赛印(现在埃及的阿斯旺)之间不同的正午时分的太阳高线及三角学计算出地球的直径。当然,他的这种计算是基于太阳足够远而将其光线看成平行光的假设为根据的。大约前200年,他采用了“地理学”(geography)一词来表示研究地球的学问。前195年,他失明了,一年后绝食而死在亚历山大港。贡献测量地球周长埃拉托斯特尼知道在一年之中白天最长的那天(夏至日)正午时分,太阳正好在阿斯旺天顶的位置,因为此时太阳光直射入阿斯旺城内的一口深井中,并在井底的水上反映出太阳的倒影。他假设他的家乡亚历山大港在阿斯旺的正北方(实际上亚历山大港在阿斯旺偏西一个经度)。他在夏至日正午时分,测量了亚历山大城里一个方尖石塔投下
· 沙瓦尼阿克拉费埃特
人口沙瓦尼阿克拉费埃特人口变化图示参见上卢瓦尔省市镇列表
· 萨拉·埃拉尼
职业生涯埃拉尼在2002年进入职业网坛转为职业选手。在家乡意大利巴勒莫巡回赛中首度闯入决赛,结以直落二盘击败乌克兰女将科里特塞娃(MariyaKoryttseva),夺得职业生涯第1个WTA单打冠军,二周后,在斯洛文尼亚波特罗斯巡回赛也闯入决赛,结果直落二盘击败西班牙女将梅迪娜·加里格斯,夺得第2个WTA单打冠军。在2012年法网比赛中,先后战胜伊万诺维奇,库兹涅佐娃,科贝尔,斯托瑟等强手闯入决赛,但在决赛中以3-6,2-6败于莎拉波娃,获得亚军。在接下来的温网比赛中,以10号种子出战,在第三轮面对哈萨克斯坦球手舍夫多娃的时候,在第一盘一分未得,成为公开赛年代第一个在一盘比赛中一分未得,连丢24分输掉整盘比赛("GoldenSet")的女球手。大满贯女单亚军(1)参考来源萨拉·埃拉尼的国际网球总会职业/青少年官方资料(英文)FedCup-Playerprofile-SaraERRANI(I...
· 埃克托·埃雷拉
生涯统计球会最后更新:2016年5月7日国家队最后更新:2016年7月1日荣誉球会葡萄牙超级杯:2013国家队中北美洲及加勒比海奥运资格赛:2012土伦杯国际足球邀请赛:2012夏季奥林匹克运动会:2012美洲金杯:2015美洲杯:2015个人土伦杯国际足球邀请赛最佳球员:2012
· 比森特·埃阿特·托米
参考

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信