leetcode Perfect Number 完全数

来源:互联网 发布:江苏国税普通发票软件 编辑:程序博客网 时间:2024/06/09 15:49

We define the Perfect Number is a positive integer that is equal to the sum of all its positive divisors except itself.

Now, given an integer n, write a function that returns true when it is a perfect number and false when it is not.
Example:

  • Input: 28
  • Output: True
  • Explanation: 28 = 1 + 2 + 4 + 7 + 14

Note: The input number n will not exceed 100,000,000. (1e8)

题意:判断一个数是不是完全数。
思路:
1、遍历会超时,稍微优化一下,注意num=0,1的特殊情况

class Solution {public:    bool checkPerfectNumber(int num) {        if (num == 0) return false;        int sum = 0;        for (int i = 1; i < num / i; ++i) {            if (num % i == 0){                sum += i;                sum += (num / i);            }        }        sum -= num;        if (sum == num)            return true;        return false;    }};

2、注意到n不超过100000000,而小于100000000的完全数有6、28、496、8128、33550336。

class Solution {public:    bool checkPerfectNumber(int num) {        static unordered_set<int> n = {6, 28, 496, 8128, 33550336};        return n.count(num);    }};
原创粉丝点击