I previously blogged about this Project Euler puzzle nearly 6 years ago, using ColdFusion. This is my approach using PHP as a simple practical exercise for myself, and I’d appreciate any feedback on my PHP code.

Problem 21:

*Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).*

If d(a) = b and d(b) = a, where a != b, then a and b are an amicable pair and each of a and b are called amicable numbers.

*For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.*

*Evaluate the sum of all the amicable numbers under 10000.*

Code:

<?php
function sumFactors($x)
{
$sum = 1;
for ($i = 2; $i <= sqrt($x); $i++)
{
if ($x % $i == 0)
{ // it's a factor
$sum += $i;
if ($i != ($x / $i)) {
$sum += ($x / $i);
}
}
}
return $sum;
}
$sum = 0;
for ($i = 1; $i <= 9999; $i++) {
$j = sumFactors($i); // sum factors of i
$k = sumFactors($j); // sum of those factors
if ($i == $k && $j != $k) {
// amicable pair
$sum += $j;
}
}
echo $sum;

The code is almost identical to the CFML code I ended up with. No new PHP functions or anything particularly interesting I learnt from doing this one again.

### Like this:

Like Loading...

*Related*

## Leave a Reply