完数定义是:完数是该数的所有分解的因数(除了自己本身外)之和与该数相等。6 = 1 + 2 + 3; 28 = 1 + 2 + 4 + 7 + 14.
改方式是先获取一个数所有约数(除自己本身外)。
//获取约数
function getPerfectNum($num)
{
$tmp = [1];
$end = $num;
for($i=2; $i < $end; $i++)
{
if($num % $i == 0)
{
$tmp[] = $i;
$tmp[] = $num / $i;
}
else $end = floor($num / $i);
}
$tmp = array_unique($tmp);
sort($tmp);
return $tmp;
}
获取某个范围之外的完数。
function getPerNum($num)
{
$t = [];
for($i = 1; $i < $num; $i++)
{
$sum = 0;
$tmps = getPerfectNum($i);
foreach($tmps as $tmp)
{
$sum += $tmp;
}
if($sum == $i)
{
$t[] = $i;
}
}
return $t;
}
$num = 108;
$tmp = getPerNum($num);
print_r($tmp);
输出结果为:
Array
(
[0] => 1
[1] => 6
[2] => 28
)