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的优点在于 他只加在元素之间,这样就不需要考虑是不是开头结尾会有无用的符号。
在我们的实例中,只是给相邻的质数加了一个空格。