码龄0.5年的python成长之路(11):找素数的模块 观察素数
素数定义:只能被1和自己整除的数。
关于素数,有以下有趣的事实:
- 素数的数量有无限多。
- 素数的分布。随着X的增大,素数的分布越来越稀疏;第n个素数渐进于logn;随机整数 X是素数的概率是1/logX。 (下面证明这是错的) - 对于任意正整数n,存在至少n个连续的正合数。
有大量关于素数的猜想,著名的有:
- 波特兰猜想。对任意给定的正整数n > 1,存在一个素数p,使得n < p < 2n。已经证明。
- 孪生素数猜想。存在无穷多的形如p和p+2的素数对。
- 素数等差数列猜想。对任意正整数n >2,有一个由素数组成的长度为n的等差数列。
- 哥德巴赫猜想。每个大于2的正偶数可以写成两个素数的和。这是最有名的素数猜想,也是最令人头疼的猜想,已经困扰数学家3世纪。至今为止,最好的结果仍然是陈景润1966年做出的。
1. 尝试重新写寻找素数的模块
- 生成1到100的数列表:
import numpy as npnums = np.arange(1, 101)
- 得到:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,92, 93, 94, 95, 96, 97, 98, 99, 100])
- 写个识别nums列表中素数的列表的封装函数:
oddlist = []
for i in nums: # 开始判断每个数是不是素数if i == 1:continue # 1不被定义为素数if i == 2 or i == 3 or i == 5:oddlist.append(i) # 2,3,5 直接添加进去else:for j in oddlist:if i % j == 0: # 遇到可以被苏素数整除,则停止循环breakelse: # 否则一直迭代while j is oddlist[-1]: # 直到循环到最后一个j,if i % j != 0: # 并且i被最后一个j也不能整除,证明是素数oddlist.append(i) # 添加进素数列表continue # 继续循环
- 我们来print一下 oddlist 看看函数是否正确
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
# len(oddlist) = 25
- 封装成一个函数
def find_odd(nums):oddlist = []for i in nums: # 开始判断每个数是不是素数if i == 1:continue # 1不被定义为素数if i == 2 or i == 3 or i == 5:oddlist.append(i) # 2,3,5 直接添加进去else:for j in oddlist:if i % j == 0: # 遇到可以被苏素数整除,则停止循环breakelse: # 否则一直迭代while j is oddlist[-1]: # 直到循环到最后一个j,if i % j != 0: # 并且i被最后一个j也不能整除,证明是素数oddlist.append(i) # 添加进素数列表continue # 继续循环return oddlist
2. 来观察一下10万整数内的素数数量的分布
- 10万个数用上诉模块算可以十几秒出结果;
- 我们用matplotlib库来做hist图,可以观察到素数量。
- 图片如上,代码如下:
import matplotlib.pyplot as plt plt.figure(figsize=(16, 4))
plt.subplot(121)
plt.hist(oddlist, bins=100, log=True)
plt.title('oddlist hist with log', fontsize=14)
plt.subplot(122)
plt.hist(oddlist, bins=100, color='purple', alpha=0.5, log=False)
plt.title('oddlist hist actual amount', fontsize=14)
plt.show()
- 可以观察到,就算是用log来拉大数的差别,我们看到越往大的数走,同一个数值区间内可以发现的素数量虽有浮动、大体在稳定的范围内。
3. 孪生素数猜想
- 孪生素数猜想:存在无穷多的形如p和p+2的素数对。
- 我们至少可以在这10万个数据当中看看有多少,用程序试试看。
- 遇到数字对,我们只记录左值,也就是p,那么数组的长度就是“有多少对”满足孪生素数猜想的数字。
- 代码如下:
twinleft = []
for i in oddlist:if i == oddlist[-1]:breakelif int(i) + 2 == oddlist[oddlist.index(i) + 1]:twinleft.append(i)continue
len(twinleft)
- 结果:
从1到10万的整数中:有1224对满足孪生素数猜想的数字。
- 我们还可以看看p的分布(代码就不写了,直接上图)
- 这“对儿数”,还真像是对数(log)分布了。
暂时到这儿吧,下次见
码龄0.5年的python成长之路(11):找素数的模块 观察素数相关推荐
- 码龄0.4年的python成长之路(八):门牌数字制作
从别处抠来的一个题目 码龄低,到处抠题自己试着锻炼思维. 1. 分析问题 这是一个蓝桥杯的题目:耗材计算的具体生产问题.原题只问2,不妨扩大问题到求:0到9数字各需要多少个.可以试着模拟每一个门牌的制 ...
- python成长之路11
一.线程: 创建线程有两种方式(本质是一样的,创建好线程之后,cpu调度创建好的线程时执行的其实是Thread的run()方法): import threading def f1(args):prin ...
- 【Python成长之路】快速理解复制、浅拷贝、深拷贝
哈喽大家好,我是鹏哥. 今天想聊聊的主题是 -- 浅拷贝/深拷贝. ~~~上课铃~~~ 赤伶HITA - 赤伶 1 写在前面 浅拷贝.深拷贝的知识点,在python笔试和面试的过程中,经常被作为考题来 ...
- 【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令
哈喽大家好,我是鹏哥. 今天想记录的学习主题是 -- 基于pythonista3 app开发自己的iphone应用程序. ~~~上课铃~~~ (由于今天被小伙伴推荐了这首歌,因此就应他的要求,作为此文 ...
- 【Python成长之路】破解Boss直聘网站滑块验证
哈喽大家好,我是鹏哥. 今天要记录的内容是 -- 破解Boss直聘网站的滑块验证. -- 上 课 铃-- TuesdayBurak Yeter;Danelle Sandoval - Tuesday 1 ...
- Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]SQL注入-2
[第一章 web入门]SQL注入-2 一.信息收集 1.首页 2.登录成功会跳转到 3.进行测试判断 二.尝试破解 1.用post型的sqlmap破解 <1>.首先,开burp截包 < ...
- 【Python成长之路】如何用2行代码将抖音视频设置成我的手机铃声
哈喽大家好,我是鹏哥. 今天想学习记录的内容是 -- 如何用python提取视频中的音频. ~~~上课铃~~~ 1 写在前面 本来按我的性子和精力,一周一般只想写一篇博客:但是今天在刷抖音时,发现有个 ...
最新文章
- 了解一下Flex 4里的fx、mx以及s命名空间
- 调度器的精髓--优先级下兼顾公平
- viewer vue 文档_vue基于viewer实现的图片查看器
- ASP.NET Core 快速入门(实战篇)
- nvl,空时的推断和取值
- try catch finally的理解
- php单例模式代码,php设计模式之单例模式代码
- 运动目标跟踪(十九)--TLD
- js简单实现切换图片上一张下一张功能
- SQL Server 百度网盘免费下载
- 一键重装深度linux系统下载,Deepin 20 Beta X64官方正式版(64位)
- moxa串口卡Linux驱动,moxa多串口驱动下载
- 零基础SSM入门教程(50)–Spring总结与展望SpringBoot、SpringCloud
- 谈一谈Normalize.css
- 节能系统优化空调方案
- spring-cloud-stream通道多线程并发消费
- DTcmsV4.0分析学习——(1)数据库结构分析
- 中学计算机教材,人教版初中信息技术教材梳理
- 985高校大数据专业教学究竟怎么样?在校生有话说
- 荣耀v10升级android10,大快人心?荣耀V10、荣耀8X、荣耀10,可以升级EMUI10了