我需要总结一个数字的所有除数来处理友好数字

时间:2014-05-05 16:48:24

标签: php

这是我到目前为止所做的功能:

function divisor($number)
{
    echo "Divisors of number : $number<br>";
    for($i=1;$i<$number;$i++)
    {
        if ( ($number%$i)==0)
        {
            echo $i,',';
        }

    }
}
divisor("220");

这是函数的输出:

Divisors of number : 220<br>1,2,4,5,10,11,20,22,44,55,110,

除数之和将为284,这意味着数字220和284是友好数字

我不想总结我在函数中输入的数字的所有除数,我该如何实现?

2 个答案:

答案 0 :(得分:0)

这可以通过对您的功能进行微调来完成。将所有除数存储在一个数组中。要打印以逗号分隔的除数列表,请使用implode()。要计算数组中值的总和,请使用array_sum()。很简单。

这是重写的功能:

function divisor($number)
{
    $divisors = array(); // Initialize empty array
    for ($i = 1; $i < $number; $i++)
    {
        if (($number % $i) == 0)
        {
            $divisors[] = $i;
        }
    }
    echo "Divisors of number: " . implode(', ', $divisors) . "<br />";
    echo "Total sum: " . array_sum($divisors) . "\n";
}

输出:

Divisors of number: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110
Total sum: 284

答案 1 :(得分:0)

更快的解决方案也适用:

<?php

function get_div_sum($n)
{
    for ($j = 1, $s = 0; $j <= $n; $j++)
        for ($i = 1; $i <= $j; $i++)
            if (!($j % $i))
                $s += $i;

    return $s;
}