《完美数》

146 阅读2分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

背景

公元前6世纪的毕达哥拉斯是最早研究完全数的人,他已经知道6和28是完全数。毕达哥拉斯曾说:"6象征着完满的婚姻以及健康和美丽,因为它的部分是完整的,并且其和等于自身。"有些《圣经》注释家认为6和28是上帝创造世界时所用的基本数字,因为上帝创造世界花了六天,二十八天则是月亮绕地球一周的日数。圣·奥古斯丁说:"6这个数本身就是完全的,并不因为上帝造物用了六天;事实上,因为这个数是一个完全数,所以上帝在六天之内把一切事物都造好了"。


文章目录


完美数

    定义: 完全数(Perfect number)又称完美数或完备数,是一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和(即因子函数)恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为"完全数"。


提示:以下是本篇文章正文内容,下面案例可供参考

一.力扣507.完美数

                    >> 507.力扣  <<

 

二、解题

1.思路

枚举出1~sqrrt(n)内所有的正因子。
如果 n 有一个大于sqrt(n)n 的因数 x,那么它一定有一个小于sqrt(n)的因数 n / x  。
因此我们可以从 1sqrt(n) 枚举 n 的因数,当出现一个 n 的因数 x 时,我们还需要算上 n/x。
此外还需要考虑特殊情况,即 x = n/x,这时我们不能重复计算。

2.代码

bool checkPerfectNumber(int num){
    int i, sum = 0;
    if(num == 1) {
        return false;               // 1 必定不是完美数
    }
    for(i = 1; i<=sqrt(n); i++) {    // 枚举出1~sqrt(n)的数
        if(num % i == 0) {           // 找出num的因子
            sum += i;                
            if(i*i != num)           // 执行判断
                sum += num / i;      //
        }
    }
    sum -= num;                     //
    return sum == num;              //sum==num 则真
}