Python进阶系列连载(14)——Python内置高阶函数filter(下)

浏览: 3043

前言

进阶部分连载继续~

如果还没看过我的入门连载部分,先看:

https://ask.hellobi.com/blog/wangdawei/10288


当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一遍~

视频传送门:https://edu.hellobi.com/course/234

图片.png

前文传送门:

Python进阶系列连载(1)——那些容易被忽略的问题(上)

Python进阶系列连载(2)——那些容易被忽略的问题(中)

Python进阶系列连载(3)——那些容易被忽略的问题(下)

Python进阶系列连载(4)——迭代器

Python进阶系列连载(5)——生成器(上)

Python进阶系列连载(6)——生成器(中)

Python进阶系列连载(7)——生成器(下)

Python进阶系列连载(8)——闭包(上)

Python进阶系列连载(9)——Python内置高阶函数map(上)

Python进阶系列连载(10)——Python内置高阶函数map(下)

Python进阶系列连载(11)——Python内置高阶函数reduce(上)

Python进阶系列连载(12)——Python内置高阶函数reduce(下)

Python进阶系列连载(13)——Python内置高阶函数filter(上)

filter

接着上节课我们继续

我们上节课说到通过filter过滤出素数

那我们来详细讲讲几种求素数的方法吧~


那我们先要了解一下什么是素数:

素数(Prime),又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。


方法一:按照定义暴力求解


按照定义,从2到n-1判断有没有能整除n的数。如果有,则不是素数,否则,是素数。

时间复杂度:O(n)

代码如下:

图片.png


方法二:还是按照定义暴力简化求解


从2到sqrt(n)判断有没有能整除n的数。如果有,则不是素数,否则,是素数。

关于这个理论证明,我在此不详述,有兴趣大家可以搜索了解一下~

时间复杂度:O(sqrt(n))

代码如下:

图片.png


方法三:素数筛法

即从2开始,先假定给所有数都是素数标签,但因为2的倍数肯定不是素数,则这些2的倍数全都修改为非素数标签。

再向右扫描,如果扫描到素数,则重复之前的过程,剔除之后的部分合数(准确的说是关于当前素数的倍数)

如果扫描到合数则跳过(表示前面已经更新过这个数不是素数)。

然后都扫描一遍即可把1~n的素数求解出来。这个算法的复杂度略高于O(n)。

素数筛代码如下:

图片.png


方法四:Miller-Rabin算法

这个算法理论要求较高,大家有兴趣可以搜索学习一下~


接下来我们说说filter怎么实现500以内的素数筛选~


其实很简单了:

先生成一个1~500的数组

图片.png


方法一:

图片.png

图片.png

图片.png


看一下方法一求得的1~500中素数的个数

图片.png


方法二:

图片.png


方法三:

图片.png

好啦,今天我们讲了使用filter筛选出素数的三种方法~


今天作业:

1.敲一遍代码,感受一下filter的黑魔法

自己不敲代码永远学不会写代码

下课

人生苦短,我选Python

未完待续,连载中......

欢迎评论指出文中错误和提问~~~


下一篇链接:Python进阶系列连载(15)——Python内置高阶函数sorted(上)

推荐 4
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

辛苦了
暴力法果然暴力

要回复文章请先登录注册