0
点赞
收藏
分享

微信扫一扫

《算法基础》算术基本定理

代码小姐 2022-02-17 阅读 45
算法

1、LeetCode——507. 完美数

 思路:直接从i=1遍历到n,判断n能不能被i整除,能的话说明是因子,于是把所有因子加起来,最后判断是否是和n相等。如果直接以这种思路来写代码的话最后是肯定要超时的,所以要优化。

因子都是成对出现的,假如有个 i 能整除 n ,那么 n/i 也能整除 n ,并且 i 和 n/i 一定满足:i <= n/i,也就是 i 的平方 <= n ,因为是 n 的因子那么就不可能大于 n 。

代码及详情如下:

bool checkPerfectNumber(int num){
    if(num <= 1) 
        return false;
    int sum = 0;
    for(int i = 1;i * i <= num;i++){
        if(num % i == 0){
            sum += i;   //累加上因子
            sum += num / i;
        }
    }
    sum -= num; // 由题不算num本身
    return sum == num;
}

2、LeetCode——263. 丑数

思路:直接一直整除2、3、5,到最后如果num=1了,那说明他是个丑数,否则不是。

代码及详情:

bool isUgly(int n){
    if(n < 1) return false;    //0和负数不是
    int arr[] = {2,3,5};
    for(int i = 0;i < 3;i++){
        while(n % arr[i] == 0){
            n /= arr[i];
        }
    }
    return n == 1;
}
举报

相关推荐

0 条评论