完数是等于其所有真因数之和的正整数;判断逻辑为遍历1到n-1,累加能整除n的数,再比较和是否等于n;1不是完数,完数稀疏,如6、28、496等。

完数(完全数)是指一个正整数,它等于除了自身以外的所有正因数之和。比如 6 的因数有 1、2、3、6,去掉自身后 1 + 2 + 3 = 6,所以 6 是完数。
判断一个数字是否为完数的核心逻辑
关键在于:遍历从 1 到 n - 1 的所有整数,找出能被 n 整除的数(即真因数),累加求和,最后比较总和是否等于 n。
注意:1 不是完数(它的真因数为空,和为 0);完数都很稀疏(前几个是 6、28、496、8128……)。
基础版 PHP 实现(适合初学者理解)
// 示例:判断 $n 是否为完数
$n = 28;
$sum = 0;
for ($i = 1; $i
if ($n % $i === 0) {
$sum += $i;
}
}
if ($sum === $n) {
echo "$n 是完数";
} else {
echo "$n 不是完数";
}
优化版(减少循环次数,提升效率)
只需检查到 √n 即可,成对提取因数(如 i 是因数,则 n/i 也是,注意避免重复加自身或重复计入 √n):
- 跳过 1 和 n 自身,从 2 开始试除
- 若 i 能整除 n,就把 i 和 n/i 都加入和(但要确保 n/i ≠ n 且 ≠ i)
- 别忘了始终加上 1(因为 1 是所有 n > 1 的真因数)
封装成函数,支持任意正整数判断
function isPerfectNumber($n) {
if ($n
$sum = 1; // 1 总是真因数
$sqrt = (int)sqrt($n);
for ($i = 2; $i
if ($n % $i === 0) {
$sum += $i;
$other = $n / $i;
if ($other != $i && $other != $n) { // 避免重复或加自身
$sum += $other;
}
}
}
return $sum === $n;
}
// 使用示例
var_dump(isPerfectNumber(6)); // true
var_dump(isPerfectNumber(28)); // true
var_dump(isPerfectNumber(12)); // false
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











