【100个python算法超详细讲解@谷哥技术】

1.问题描述
梅森数(Mersenne Prime)指的是形如2 n -1的正整数,其中指数n
是素数,记为Mn。如果一个梅森数是素数,则称其为梅森素数。例如
2 2 -1=3、2 3 -1=7都是梅森素数。
当n=2、3、5、7时,Mn都是素数,但n=11时,Mn=M 11 =2 11
-1=2047=23×89,显然不是梅森素数。
1722年,瑞士数学大师欧拉证明了2 31 -1=2147483647是一个素
数,它共有10位数,成为当时世界上已知的最大素数。
迄今为止,人们仅发现了47个梅森素数。梅森素数历来都是数论
研究中的一项重要内容,也是当今科学探索中的热点和难点问题。
了解了梅森素数后,现在来看本节要解决的编程问题。
试求出指数n<20的所有梅森素数。
2.问题分析
只要理解了梅森素数的定义,该问题并不难求解。
要编程求解的问题是找出指数n<20的所有梅森素数。根据梅森素
数的定义,我们可以先求出n<20的所有梅森数,再逐一判断这些数是
否为素数。如果是素数,则表示该数为梅森素数,打印输出即可,否
则不是梅森素数。
3.算法设计
由问题分析可知,我们要求n<20的所有梅森数,因此在本题的算
法设计中需要采用循环结构。
设变量mp存储梅森数,整数i表示指数,其取值从2~19,i每变化
一次,都相应地计算出一个梅森数,存放在mp中。对每次计算得到的
当前mp值,都调用函数prime()进行判断。
在判断mp是否为素数时可以定义一个函数prime(),每次都将mp
的当前值作为实参传递给函数prime(),在prime()中使用前面介绍过的
判断素数的方法进行判断。如果n为素数,则prime()函数返回值为1,
否则prime()函数返回值为0。
若prime()函数返回值为1,则当前mp为梅森素数,应该将其输
出;若prime()函数返回值为0,则当前mp不是梅森素数。
4.确定程序框架
程序的流程图如图5.13所示。

5.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 梅森素数
import math
# 判断n是否为素数
def prime(n):
k = math.sqrt(n) + 1
i = 2
while i <= k:
if n % i == 0:
return 0 # n能被j整除,不是素数,返回0
i += 1
return 1 # n是素数,返回1
if __name__=="__main__":
n = 0
print("梅森素数:")
for i in range(2, 20):
mp = (2 ** i) - 1 # 求梅森数
if prime(mp): # 判断mp是否为梅森素数
n += 1
print("M(%d) = %d" %(i, mp)) # 若当前mp为梅森素数,则打印,i为指数
print("2的指数n<20的所有梅森素数有:%d个" %n)

6.运行结果
在PyCharm下运行程序,结果如图5.14所示。由图5.14可见,
M(2)=3,表示3是指数为2的梅森素数,其他的结果可类似解释。由运
行结果可知,n<20的所有梅森素数共有7个。

100个python算法超详细讲解:梅森素数相关推荐

  1. 100个python算法超详细讲解:素数

    1.问题描述 求给定范围start-end之间的所有素数. 2.问题分析 素数指的是只能被1和它自身整除的整数. 判定一个整数m是否为素数的关键,就是要判定整数m能否能被除1和 它自身以外的其他任何整 ...

  2. 100个python算法超详细讲解:搬山游戏

    [100个python算法超详细讲解]@谷歌学术 1.问题描述 设有n座山,计算机与人作为比赛的双方,轮流搬山.规定每次搬 山数不能超过k座,谁搬最后一座谁输.游戏开始时,计算机请人输入 山的总数n和 ...

  3. 100个python算法超详细讲解:平分7筐鱼

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 2.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时, 他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们 ...

  4. 100个python算法超详细讲解:邮票组合

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小 面值邮票中的一张或几张的组合,可以满足不同邮件的不同邮资.现 在,邮局有4种不 ...

  5. 100个python算法超详细讲解:递归解决年龄问题

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问 第4个人多少岁,他说比第3个人大2岁.问第3人多少岁,他说比第2个 人大2 ...

  6. 100个python算法超详细讲解:谁是窃贼

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃 贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎. 下面是这4个人给警察 ...

  7. 100个python算法超详细讲解:抢30游戏

    [100个python算法超详细讲解]@谷歌学术 1.问题描述 由两个人玩"抢30"游戏,游戏规则是:第一个人先说"1"或"1,2",第 二 ...

  8. 100个python算法超详细讲解:卡布列克常数

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 对于任意一个4位数n,进行如下的运算: 1)将组成该4位数的4个数字由大到小排列,形成由这4个数字构 成的最大的4位数. 2)将组成该4 ...

  9. 100个python算法超详细讲解:孪生素数

    [100个python算法超详细讲解@谷哥技术] 1.问题描述 本节要研究孪生素数的问题,先来看看什么是孪生素数. 所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离已经 近得不能再近了,如 ...

最新文章

  1. Google Project Zero挖洞经验整理
  2. 如何在VS2008中添加WM_INITDIALOG消息映射
  3. 微信小程序开放直播能力,你怎么看?
  4. Android之Volley 源码解析
  5. 【Java学习笔记五】Java异常处理
  6. restful风格使用小例
  7. calendar获取本周一的日期_Java Calendar 获取本周周一和周日代码
  8. js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象
  9. zoj 1406 Jungle Roads
  10. thinkphp中join用法
  11. linux Centos下mysql安装
  12. CCS安装教程——学习DSP的第一步
  13. html苹果笔记本文稿如何转换,苹果电脑的pages文档想要变成word格式该如何转换...
  14. VMware虚拟机Mac OS X 扩展内存方法
  15. ListView实现物流追踪
  16. java网络编程--TCP程序设计
  17. Excel单元格首位数字为“0”不显示的问题
  18. Java控制台游戏~600行代码实现打怪小游戏
  19. LINUX 指令学习
  20. 控制互联网就是控制世界

热门文章

  1. NAND闪存可靠性概览
  2. 《The Ride of a Lifetime》---- 迪士尼CEO自述批量打造超级IP的经营哲学
  3. 【回答问题】ChatGPT上线了!推荐30个以上比较好的中文bert系列的模型/压缩模型
  4. 【DL】第5章 以示例文本的样式生成文本
  5. 用C语言实现模板类的一些个人思路
  6. 无线传感器网络——读书笔记
  7. C语言----空心六边形
  8. jquery ajax同源、跨域请求整理
  9. 数论概论读书笔记 41.连分数与佩尔方程
  10. TTL和CMOS电平总结(转载)