python因数之和等于数字本⾝,完全数,盈数,亏数到底是什
么⿁?python实现给你看...
说起《⼏何原本》,那是数学中神⼀般的存在,它奠定了现代⼏何的基础。⽽其作者就是⼤名⿍⿍的欧⼏⾥得,在数学史上当然也是⼀个伟⼤的奠基⼈,⽽且以⾼产著称,其中,完全数就是他发现的。
完全数,定义为所有因数相加(因数中去掉⾃⾝),和等于⾃⼰的⾃然数。例如第⼀个完全数是6,它除去⾃⾝的因数是1,2,3,1+2+3的和恰好是6,第⼆个完全数是28。
相应的,因数和⼩于⾃⾝的称为亏数,⼤于⾃⾝的叫做盈数。
那么,完全数有什么⽤途呢?答,⽬前还没发现。数学家是⼀个伟⼤的职业,⼀⽣中研究的问题较少,如果没有阶段性的进展,那是有点悲哀的,只能作为下⼀个数学家的阶梯,⼀步⼀步往上爬。就拿完全数来说,没发现它的⽤途之前,它只不是⼀个数字游戏。但是它的证明难度却不是你我凡⼈能够Hold住的,付出多少数学家的⼼⾎,才发现这么⼀些”有趣”的东西。
于是,数学家们发现:
完全数可以展开成2的幂和,看不懂?看图:
完全数还可以表⽰成连续⾃然数之和:
完全数所有因数(包括它本⾝)的倒数和等于2:什么是自然数
⽬前还没有发现奇完全数,偶完全数都以6或28结尾。另外,第10个完全数已经达到了54位,所以在程序中⽤普通算法来判断完全数会导致整数溢出。
虽然普通算法实现没太⼤意义,但是我们还是⽤python看看吧:
# perf_num.pyimport mathclass math_game: # 如果是完全数,返回True def is_perf_num(num): facs = [] # list初始化,⾃然数都有因数1,顺便加⼊吧,省得后⾯计算 facs.append(1) # 前⾯加了1,所以从2开始去探测是否能够除尽 # 使⽤平⽅根作为截⽌条件,省去后⾯过多循环。 for fac in range(2, int(math.sqrt(num) + 1)): if(num % fac == 0): facs.append(fac) # 如果当前因数除尽,同时加⼊另外⼀个因数 # 节省循环次数,同时消除类似5*5这样重复因数 if(num / fac != fac): facs.append(num / fac) sum = 0 for fac in facs: sum += fac return sum == num
python作为⼀种脚本语⾔,调试起来很⽅便,直接python命令进⼊解释器环境即可:
python>>> from perf_num import math_game>>> math_game.is_perf_num(6)True
但是,这⾥有⼀个⼤坑⼀定要注意,解释器加载模块后有缓存,所以如果你修改了⽂件,需要在环境中重新加载,才能反映最近的更新:
>>> dules['perf_num'])>>> from perf_num import math_game
这样就可以了:)
好了,今天就介绍到这⾥了,⼤家如果发现更有趣的,请在下⾯分享吧。
原创版权,如引⽤需要注明来源和链接。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论