- 所有完美数的倒数都是调和数。例如:
- 可以表示成连续奇立方数之和。除6以外的完全数,都可以表示成连续奇立方数之和,并规律式增加。例如:
04 判断
如何判断是为否完美数呢?在计算机数值型可以表达的的范围内,我们可以尝试找一找。
这是一道leetcode题(No.507),我前段时间写过一个解,在leetcode平台上已通过:
已知完美数都以6或8结尾,所以才有了上面的方法,注意这不是寻找一个数所有因子的方法。使用6或8结尾这个小trick,实现更高效( > 95.26%),但不严谨。
很遗憾,今天我发现这是一个错误的解法,虽然在Leetcode上已经通过。原因如下,我们试图打印尽可能多的完美数:
第1个完美数: 6
第2个完美数: 28
第3个完美数: 120
第4个完美数: 496
第5个完美数: 2016
第6个完美数: 8128
第7个完美数: 32640
第8个完美数: 130816
第9个完美数: 523776
第10个完美数: 2096128
很明显,120不是一个完美数,因此,可以确定Leetcode平台遗漏了这些cases,已经将此问题提交到Leetocode,如下所示:
05 正解
如果遍历所有的小于num的数,check是否为其因子,时间复杂度为o(n),在平台上提交会超时。
一种更好的解法,时间复杂度为O(sqrt(n)), 因为num的两个因子:num_i和num_j,假设num_i < num_j ,则 num_i 的最大值为 sqrt(num), 所以我们只需要遍历到sqrt(num)即可。
代码如下:
06 更多完美数
-
8,589,869,056
-
137,438,691,328
-
2,305,843,008,139,952,128
-
2,658,455,991,569,831,744,654,692,615,953,842,176
10.191,561,942,608,236,107,294,793,378,084,303,638,130,997,321,548,169,216
最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!