# Duncan's blog

## October 4, 2014

### Project Euler: problem 21 (PHP) – Amicable numbers

Filed under: PHP,Project Euler — duncan @ 8:00 am

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.