ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

完美数,自除数

2019-08-29 15:01:56  阅读:515  来源: 互联网

标签:tmp 完美 28 int num 除数 left


完美数

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

给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False

示例:

输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14

提示:

输入的数字 n 不会超过 100,000,000. (1e8)

class Solution {
    public boolean checkPerfectNumber(int num) {
        /*
        1.奇数肯定不是完美数
        2.对于数字28,可以判断2-28/2范围内的可以整除的数,然后加起来看是否和28相等
        上面的方法逐个判断有冗余,因为28%2=0,28%14=0,判断了2次,我们可以减少为一次判断
        具体的,当我们知道28%2=0之后,将28/2=14的结果也保存下来,这样就不用在判断是否可以被14整除了。
         for(int i = 2; i < num / i; i++) 当i=2时,i<28/2=14,这样就排除了14
         以这种方式每次将区间的范围缩小为 i~num/i,时间O(logn)
        */
        if(num % 2 != 0) return false;
        
        int tmp = 1;
        for(int i = 2; i < num / i; i++){
            if(num % i == 0){
                tmp += i + num / i;
            }
        }
        
        return tmp == num;
    }
}

作者:hjs-5
链接:https://leetcode-cn.com/problems/perfect-number/solution/javati-jie-by-hjs-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

自除数 是指可以被它包含的每一位数除尽的数。

例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。

还有,自除数不允许包含 0 。

给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。

示例 1:

输入:
上边界left = 1, 下边界right = 22
输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
注意:

每个输入参数的边界满足 1 <= left <= right <= 10000。

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {
        /*
        依次取下num中的每一位,然后判断是否自除数:
        1.如果为0,则肯定不是自除数,因为不能除以0
        2.如果不为0,则用原来的数对刚取下的最后一个数取模
        */
        List<Integer> res = new ArrayList<>();
        
        int len = right - left + 1;
        int tmp= left;
        for(int i = left; i < right + 1; i++){
            if(isDividingNumber(i)){
                res.add(i);    
            }
        }
        
        return res;
        
    }
    
    public boolean isDividingNumber(int num){
        int tmp = 0;
        int n = num;
        while(num > 0){
            tmp = num % 10;
            
            if(tmp == 0 || n % tmp != 0){
            
                return false;
            }
            num /= 10;
        }
        return true;
    
    }
}

标签:tmp,完美,28,int,num,除数,left
来源: https://blog.csdn.net/weixin_35576881/article/details/100065302

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有