用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示
目录
一、冰雹猜想的来由
二、实现方法
1、定义根据规则生成新数的函数
2、定义生成列表的函数
3、定义主函数
三、完整代码
四、部分代码分析
五、输出结果
1、输入4
2、强悍的27
总结:
前面完成两个黑洞的程序演示,下面用python实现冰雹猜想的演示,如果对前面的两个黑洞的程序演示有想法,可以参考我以前的两篇博文。
一、冰雹猜想的来由
1976年的一天,《华盛顿邮报》于头版头条报道了一条数学新闻。文中记叙了这样一个故事:
70年代中期,美国各所名牌大学校园内,人们都像发疯一般,夜以继日,废寝忘食地玩弄一种数学游戏。这个游戏十分简单:任意写出一个正整数N,并且按照以下的规律进行变换:
如果是个奇数,则下一步变成3N+1。
如果是个偶数,则下一步变成N/2。
不单单是学生,甚至连教师、研究员、教授与学究都纷纷加入 。为什么这种游戏的魅力经久不衰?因为人们发现,无论N是怎样一个数字,最终都无法逃脱回到谷底1。准确地说,是无法逃出落入底部的4-2-1循环,永远也逃不出这样的宿命。
这就是著名的“冰雹猜想”
冰雹猜想又称角谷猜想,因为是一个名叫角谷的日本人把它传到中国。
二、实现方法
1、定义根据规则生成新数的函数
#生成新数
def generate_new_number(number):if number % 2 == 0:number = number / 2else:number = number * 3 + 1return int(number)
输入正整数,根据奇偶性进行相应的运算,并返回新数
2、定义生成列表的函数
#定义计算生成列表的函数
def cal_to_list(input_number):number_list =[] #用于存放过程中的数值new_number = generate_new_number(input_number)number_list.extend([input_number,new_number])#符合条件循环,并将产生的数存入列表,以便查阅统计while new_number > 1:new_number = generate_new_number(new_number)number_list.append(new_number)#打印输出for item in number_list:print(item)#打印输出特殊值print("进行了{0}次运算".format(len(number_list)-1))print("最大的数是{0}".format(max(number_list)))
调用前面的新数产生函数,产生新数,并根据情况跳出循环,将结果存放到列表中。
3、定义主函数
def main():input_number = input("请输入一个正整数!") # 接收输入的数input_int_number = int(input_number) cal_to_list(input_int_number)str_begin = input("再来一次,y 或 n ?")if str_begin in ['Y','y','是']:main()elif str_begin == 'N' or str_begin == 'n':print("感谢您的使用!")else:print("输入错误,会重新开始!")main()
包括接收输入数据,调用函数,决定是否再次运行主程序
三、完整代码
"""本程序用来演示冰雹猜想
基本描述:
冰雹猜想 是指:一个正整数x,如果是奇数就乘以3再加1,
如果是偶数就析出偶数因数2ⁿ,这样经过若干个次数,最终回到1。
实现方法:
利用函数判断生成新的数据,调用函数运算不断运算直到符合最小正整数的条件
备注:
以后学习数据分析时,可以生成数据,统计每个正整数的数据情况
"""
#生成新数
def generate_new_number(number):if number % 2 == 0:number = number / 2else:number = number * 3 + 1return int(number) #如果此处不加int转化,则会产生的浮点数,没找到为什么.#定义主函数
def main():input_number = input("请输入一个正整数!") # 接收输入的数input_int_number = int(input_number) # 由于输入的数据直接生成的是字符类的数据,必须先转化为cal_to_list(input_int_number)str_begin = input("再来一次,y 或 n ?")if str_begin in ['Y','y','是']:main()elif str_begin == 'N' or str_begin == 'n':print("感谢您的使用!")else:print("输入错误,会重新开始!")main()
#定义计算生成列表的函数
def cal_to_list(input_number):number_list =[] #用于存放过程中的数值new_number = generate_new_number(input_number)number_list.extend([input_number,new_number])#符合条件循环,并将产生的数存入列表,以便查阅统计while new_number > 1:new_number = generate_new_number(new_number)number_list.append(new_number)#打印输出for item in number_list:print(item)#打印输出特殊值print("进行了{0}次运算".format(len(number_list)-1))print("最大的数是{0}".format(max(number_list)))main()
四、部分代码分析
1、input()输入的数据字符串类型。
通过input输入的数据是字符串类型,要进行数学运算必须先转化为整数型,否则后面的列表比较求最大值时会产生错误。
input_number = input("请输入一个正整数!") # 接收输入的数input_int_number = int(input_number)
2、列表多个元素的添加
列表添加多个列表元素时,
一种方法是利用append(),但是每次只能添加一个元素,两个元素需要分两次添加。
第二种方法是利用extend(),但是需要将多个元素组合成列表加入
#方法一,利用append()逐个加入number_list.append(input_number)number_list.append(new_number)
#方法二,利用extend(),组合成列表后加入,内存操作相对较多number_list.extend([input_number,new_number])
五、输出结果
1、输入4
请输入一个正整数!4
4
2
1
进行了2次运算
最大的数是4
2、强悍的27
请输入一个正整数!27
27
82
......
9232
4616
2308
......
2
1
进行了111次运算
最大的数是9232
备注:冰雹的最大魅力在于不可预知性。英国剑桥大学教授John Conway找到了一个自然数27。虽然27是一个貌不惊人的自然数,但是如果按照上述方法进行运算,则它的上浮下沉异常剧烈:首先,27要经过77步骤的变换到达顶峰值9232,然后又经过34步骤到达谷底值1。全部的变换过程(称作“雹程”)需要111步,其顶峰值9232,达到了原有数字27的342倍多,如果以瀑布般的直线下落(2的N次方)来比较,则具有同样雹程的数字N要达到2的111次方。其对比何其惊人!
总结:
总体来说,程序实现起来比较简单,但对于结果的分析还是做的不到位的,需要进行分析,有可能的话可以进行数学的推导与验算。再次学习了数据分析以后,可以将每个数的值进行分析,总结规律。
用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示相关推荐
- c语言问题 角谷猜想,hdu 1279 验证角谷猜想(简单的模拟)
Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...
- 角谷猜想(Collatz conjecture)--用 python 语言实现
老师布置的一个小作业–用python代码实现角谷猜想,下面就给大家提供一个思路,供大家参考. ''' 角谷猜想: n 是一个自然数 如果 n 是奇数,则 n = 3 * n + 1 如果 n 是偶数, ...
- 【python角谷猜想】
题目: 角谷猜想,又称为冰雹猜想,是日本数学家角谷静夫发现的一种数学现象,电的具体内容是:一个正整救n,若为偶教,则变为n/2,若为奇数,则乘3加1(即3n+1).不新重复这样的运算,经过有限步后,必 ...
- java证明角谷猜想_角谷猜想证明
摘要: 本文应用反证法,通过黑洞数唯1,3x+1必唯1,证明3x+1猜想成立. 关键词: 角谷猜想 黑洞 一."角谷猜想"概念 "角谷猜想"又称"冰雹 ...
- Python验证和可视化冰雹猜想、角谷猜想、考拉兹猜想
推荐教材:<中学生可以这样学Python(微课版)>,董付国.应根球,清华大学出版社,ISBN:9787302554639 京东购买链接: =================== 问题描述 ...
- 奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想
输入两个正整数a和b(1<a<b<1000),输出二者之间所有数的奇偶归一猜想的验证过程. [科普] 奇偶归一猜想,又称为3n+1猜想.冰雹猜想.角谷猜想等.其内容为"对于 ...
- Python验证和可视化之三大猜想 [ 冰雹猜想、角谷猜想、考拉兹猜想 ]
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本篇文章来自腾讯云 作者:Python小屋屋主 ( 想要学习Python?Pyth ...
- C语言编写冰雹猜想(角谷猜想)
1976年的一天,<华盛顿邮报>于头版头条刊登了一条数学新闻,文中叙述了这样一则故事:70年代中期,美国个所名牌大学校园内,人们都像发疯一般,日以继夜废寝忘食地玩弄一种数学游戏,这个游戏十 ...
- python角谷猜想详细步骤_用python3.7编写考拉兹猜想 -
你听说过考拉兹猜想吗?就是随便选一个大于1自然数,如果是奇数就乘3加1,如果是偶数就除2,如此循环,最后结果一定是1.考拉兹猜想又称为奇偶归一猜想.3n+1猜想.冰雹猜想.角谷猜想.哈塞猜想.乌拉姆猜 ...
最新文章
- Nagios监控之9:利用sendmail使用第三方SMTP服务发送邮件报警
- Java 技术篇-linux系统下安装jdk、设置java环境变量实例演示
- 蔡砚刚:uAVS3对标x265 veryslow将节省30%码率
- 自定义预览_为什么NVR预览画面数量少于已经添加的通道数
- GIT项目管理工具(part8)--版本控制
- suse11 rpm 安装mysql_SuSE11安装MySQL5.7.22:RPM安装方式
- apache shiro版本查看_深入学习SpringBoot(四):springboot整合shiro
- su root 后还是不能使用useradd ,useradd 等命令
- Python2+Selenium入门04-关于WebDriver类
- web显示实时时间动态刷新
- 吉林大学计算机数据中心排名,2018年度中国医院排行榜发布,吉大一院跻身50强!...
- 【模型选择】从0到1的数据价值实现需要数据分析师做些什么?
- Linux源码解析--从开机加电到main函数
- 双绞线的线序568A与568B
- 配置 PO SLD步骤
- Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
- 方正飞鸿:OA系统先进性如何在工作流中体现
- 实用工具|零代码实现高德地图POI数据下载
- C语言哈夫曼编码压缩解压
- 域名是干啥用的?企业自己都记不住的域名还能发挥作用吗?