305完美数

Posted huoyingfans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了305完美数相关的知识,希望对你有一定的参考价值。

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

给定一个 整数 n, 如果是完美数,返回 true;否则返回 false

  

示例 1

输入:num = 28

输出:true

解释:28 1 2 4 7 14

1247, 和 14 是 28 的所有正因子。

示例 2

输入:num = 7

输出:false

  

提示:

1 <= num <= 108

通过次数61,582提交次数126,165

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/perfect-number

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.isNumber;

/**

 * 507. 完美数 对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

 *

 * 给定一个 整数 n, 如果是完美数,返回 true;否则返回 false。

 *

 * 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 *

 * @author wen.lei@brgroup.com

 *

 *         2022-2-19

 */

public class PerfectNumber

    /*示例 1:

     

    输入:num = 28

    输出:true

    解释:28 = 1 + 2 + 4 + 7 + 14

    1, 2, 4, 7, 和 14 是 28 的所有正因子。

    示例 2:

     

    输入:num = 7

    输出:true

      

     

    提示:

     

    1 <= num <= 108*/

    /**

     * 从1到num-1,找出所有因子求和,同num比较。

     * @param num

     * @return

     */

    public boolean checkPerfectNumber(int num)

        //优化点2点:num=1,特殊判断;遍历的最大值

        int sum = 0;

        for (int i = 1; i < num; i++)

            if (num % i == 0)

                sum += i;

            

        

        return sum == num;

    

     

    /**

     * 有问题:本来想的是sum初始化为1,因为1是每个数的因子。但是,特殊num输入“1”,就没判断到排除自己。

     * 这个代码,排除自己本身作为因子,是通过i<num来判定的。

     * 因此:为了优化,结果反而坑了

     * 从1到num-1,找出所有因子求和,同num比较。

     * @param num

     * @return

     */

    public boolean checkPerfectNumberError(int num)

        int sum = 1;

        for (int i = 2; i < num; i++)

            if (num % i == 0)

                sum += i;

            

        

        return sum == num;

    

package test.leecode.isNumber;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.isNumber.PerfectNumber;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-19

 */

public class PerfectNumberTest

    @Test

    public void test()

        PerfectNumber pn = new PerfectNumber();

        Assert.assertTrue(pn.checkPerfectNumber(28));

        Assert.assertFalse(pn.checkPerfectNumber(2));

        Assert.assertFalse(pn.checkPerfectNumber(3));

        Assert.assertFalse(pn.checkPerfectNumber(8));

    

以上是关于305完美数的主要内容,如果未能解决你的问题,请参考以下文章

3624完美数

3624完美数

LeetCode:507. 完美数————简单

Python|Leetcode《507》|完美数

LeetCode-015-三数之和

Python如何判断和寻找完美数