素数定义:只能被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):找素数的模块 观察素数相关推荐

  1. 码龄0.4年的python成长之路(八):门牌数字制作

    从别处抠来的一个题目 码龄低,到处抠题自己试着锻炼思维. 1. 分析问题 这是一个蓝桥杯的题目:耗材计算的具体生产问题.原题只问2,不妨扩大问题到求:0到9数字各需要多少个.可以试着模拟每一个门牌的制 ...

  2. python成长之路11

    一.线程: 创建线程有两种方式(本质是一样的,创建好线程之后,cpu调度创建好的线程时执行的其实是Thread的run()方法): import threading def f1(args):prin ...

  3. 【Python成长之路】快速理解复制、浅拷贝、深拷贝

    哈喽大家好,我是鹏哥. 今天想聊聊的主题是 -- 浅拷贝/深拷贝. ~~~上课铃~~~ 赤伶HITA - 赤伶 1 写在前面 浅拷贝.深拷贝的知识点,在python笔试和面试的过程中,经常被作为考题来 ...

  4. 【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

    哈喽大家好,我是鹏哥. 今天想记录的学习主题是 -- 基于pythonista3 app开发自己的iphone应用程序. ~~~上课铃~~~ (由于今天被小伙伴推荐了这首歌,因此就应他的要求,作为此文 ...

  5. 【Python成长之路】破解Boss直聘网站滑块验证

    哈喽大家好,我是鹏哥. 今天要记录的内容是 -- 破解Boss直聘网站的滑块验证. -- 上 课 铃-- TuesdayBurak Yeter;Danelle Sandoval - Tuesday 1 ...

  6. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  7. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  8. 《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]SQL注入-2

    [第一章 web入门]SQL注入-2 一.信息收集 1.首页 2.登录成功会跳转到 3.进行测试判断 二.尝试破解 1.用post型的sqlmap破解 <1>.首先,开burp截包 < ...

  9. 【Python成长之路】如何用2行代码将抖音视频设置成我的手机铃声

    哈喽大家好,我是鹏哥. 今天想学习记录的内容是 -- 如何用python提取视频中的音频. ~~~上课铃~~~ 1 写在前面 本来按我的性子和精力,一周一般只想写一篇博客:但是今天在刷抖音时,发现有个 ...

最新文章

  1. 了解一下Flex 4里的fx、mx以及s命名空间
  2. 调度器的精髓--优先级下兼顾公平
  3. viewer vue 文档_vue基于viewer实现的图片查看器
  4. ASP.NET Core 快速入门(实战篇)
  5. nvl,空时的推断和取值
  6. try catch finally的理解
  7. php单例模式代码,php设计模式之单例模式代码
  8. 运动目标跟踪(十九)--TLD
  9. js简单实现切换图片上一张下一张功能
  10. SQL Server 百度网盘免费下载
  11. 一键重装深度linux系统下载,Deepin 20 Beta X64官方正式版(64位)
  12. moxa串口卡Linux驱动,moxa多串口驱动下载
  13. 零基础SSM入门教程(50)–Spring总结与展望SpringBoot、SpringCloud
  14. 谈一谈Normalize.css
  15. 节能系统优化空调方案
  16. spring-cloud-stream通道多线程并发消费
  17. DTcmsV4.0分析学习——(1)数据库结构分析
  18. 中学计算机教材,人教版初中信息技术教材梳理
  19. 985高校大数据专业教学究竟怎么样?在校生有话说
  20. 荣耀v10升级android10,大快人心?荣耀V10、荣耀8X、荣耀10,可以升级EMUI10了

热门文章

  1. 盘点腾讯十大成功产品
  2. 小幺鸡接口管理本地部署
  3. Matlab运算符与运算
  4. 3D建模师做多了女人会不会找不到老婆?次世代美少女战士建模流程讲解
  5. CTF_CRYPTO(习题)
  6. 2020杭电多校训练(第一、二场)
  7. java web 轻量 编辑器_NKeditor: NKedtior是一款优秀的轻量级Web编辑器,基于 Kindedior 二次开发...
  8. autoware.auto泊车规划模块介绍(一)
  9. Linux---死锁
  10. Msf之内网渗透生成Windows后门