判断是否为完美数

题意:

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

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

示例 1:

输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14 1, 2, 4, 7, 和 14 是 28 的所有正因子。

示例 2:

输入:num = 7
输出:false

提示:

  • 1 <= num <= 10^8

题目来源: https://leetcode.cn/problems/perfect-number/description/

解题方法:

方法一:循环(效率慢)

function checkPerfectNumber($num) {
    $res = 0;
    $index = $num;
    for($i = 1; $i < $index; $i++){
        $yin = $num / $i;
        if(is_int($yin)){
            $res += ($i + $yin);
            $index = $yin;
        }           
    }
    if(($res - $num) == $num){
        return true;
    }
    return false;
}

方法二:枚举(效率高)

// 枚举法,效率快
function checkPerfectNumber($num) {
    if($num == 1){
        return false;
    }
    $num2 = intval(sqrt($num));
    $i = 2;
    $sum = 1;
    while($i <= $num2){
        if($num % $i == 0){
            $sum += $i;
            if($i != $num / $i){
                $sum += $num / $i;
            }
        }
        $i++;
    }
    if($sum == $num){
        return true;
    }else{
        return false;
    }      
}

方法三:面向答案编程

// 在此题意区间满足的只有[6,28,496,8128,33550336],面向答案编程,效率最佳
function checkPerfectNumber($num) {
    return in_array($num, [6,28,496,8128,33550336]);
}

你可能感兴趣的:(PHP,算法,数据结构,php)