【题解】《算法零基础100讲》(第9讲) 算术基本定理(java版)

😁算法小白欢迎加入此社区:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬带领的抱团学算法队伍,从0开始,期待你的加入
🥳
在这里插入图片描述
本博文是对此文章习题所作的题解,如有不足,请多指教:https://blog.csdn.net/WhereIsHeroFrom/article/details/120875289

先对英雄的讲解文章里的代码进行记录整理
在这里插入图片描述

bool checkPerfectNumber(int num){
    int i, sum = 0;
    if(num == 1) {
        return false;               
    }
    for(i = 1; i*i <= num; ++i) {    
        if(num % i == 0) {           
            sum += i;
            if(i*i != num)
                sum += num / i;
        }
    }
    sum -= num;                     
    return sum == num;
}
/*代码转载自:https://blog.csdn.net/WhereIsHeroFrom/article/details/120875289*/

先对1的时候特殊处理一下,然后你求一个数的正因子,不可能存在两个正因子同时比这个数开根号还大,所以我们的判断条件就是 i*i<=num; 然后后面的if语句是说如果能整除,那么我们再把另一个质因子求出来,你比如28的正因子有个2,那么就该有个14,但是14比根号下28要大,所以我们要用sum+=num / i 来求出另一个正因子。

今日题解:
第一题:https://leetcode-cn.com/problems/perfect-number/
在这里插入图片描述
在这里插入图片描述

跟上面的思路一模一样,直接出击!

class Solution {
    public boolean checkPerfectNumber(int num) {
        int i, sum = 0;
        if(num == 1) {
            return false;               
    }
        for(i = 1; i*i <= num; ++i) {    
            if(num % i == 0) {           
                sum += i;
                if(i*i != num)
                    sum += num / i;
        }
    }
        sum -= num;                     
        return sum == num;
    }
}

在这里插入图片描述

第二题:https://leetcode-cn.com/problems/ugly-number/
在这里插入图片描述
在这里插入图片描述
关于丑数的详解参考笔者此篇博文https://blog.csdn.net/weixin_52605156/article/details/121023872?spm=1001.2014.3001.5501

这里处理起来相对简单一些,因为我知道不管怎么样,你的丑数一定是通过2、3、5之间相乘得到的,所以我们就可以使用一个循环,不断的对你输入的这个数进行取余和对其整除,直到为1,那它就是一个丑数。

class Solution {
    public boolean isUgly(int num) {
        if(num==0){
            return false;
        }
        while(true){
            if(num%2==0){
                num = num/2;
            }
            else if(num%3==0){
                num = num/3;
            }
            else if(num%5==0){
                num = num/5;
            }
            else{
                break;
            }
        }
        if(num == 1){
            return true;
        }
        else{
            return false;
        }
    }
}

在这里插入图片描述

有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的xiaolang

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值