[编程] 2 python 实现埃拉托色尼筛选法

1.1简介:
埃拉托色尼筛选法是用来生成质数的经典计算机编程算法,一般用来衡量计算机的速度。

我们知道,质数是能被自己和1整除的整数。

2,3,5,7,11都是质数。

那么算法是如何实现质数的识别呢?

1.2我们可以简化理解为:
从2开始 (忽略0 1的影响)
2为质数所以,我们通过循环剔除 2的倍数的数
3为质数,通过循环剔除3的倍数的数
… 大浪淘沙,最后没有被剔除的数都是质数。

1.3伪代码:
1.输入一个上限n
2.定义一个n个容量的全真布尔运算数组bool_list
3.进入循环体:如果bool_list 为真
4.剔除他的倍数
5.令他的倍数为假。
在这里插入图片描述
1.4注意:
为什么我将bool_list 设置为n+1个元素呢?
因为我在下面遍历n个数的时候用到了range(start,end)函数
这个函数可以生成 start到end-1的数。
因此加一得到。
如果将bool_list 设置为n个元素则会出现如下错误:
在这里插入图片描述
遍历在第一次进行的时候就死掉了,
我们发现,i最大可以取到n+1,对于剔除合数的for 函数里面来说 bool_list[i] 当i取到n+1是一个空集 即 我没有bool_list[n+1]这一项。

不过这个无关痛痒,只要前后保持一致就可以啦!
大家也可以全改成n,然后输入的时候手动加一就好啦!

1.5代码改进:

优化python程序时,最重要的原则之一是:
从执行时间的角度来说,print 语句的开销很大。
所以,我们更希望将多个print改成单一输出操作。

结合我们的代码可知:
我们的打印是在找到那个质数便将他打印出来,我们是不是可以创建一个空列表,当有一个新的质数,我们就把他存在空列表中。最后只需打印空列表此时的列表即可。

在这里插入图片描述

在这里我们用到了 join 字符串方法;
join 用于将多个字符串合并为1个。
在这里插入图片描述
join的优点在于 他只加在元素之间,这样就不需要考虑是不是开头结尾会有无用的符号。
在我们的实例中,只是给相邻的质数加了一个空格。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值