Project Euler にチャレンジ:Problem 23 PHPでの解答

← Problem 22  Problem 24 →
28213までの過剰数を求めた後、28213までの中から、過剰数の和で算出できたものを除外していって、最後に合計する。
<?php

// 28213 以下の過剰数を見つける。
$array = array();
$answer = 0;
for($i = 2 ; $i <= 28213 ; $i++)
{
	$tmp = 0;
	$sqrt = sqrt($i);
	for($j = 2 ; $j <= $sqrt ; $j++)
	{
		if($j == $sqrt)
		{
			$tmp +=$j;
		}
		else if($i % $j == 0)
		{
			$tmp = $tmp + $j + ($i / $j);
		}
	}
	if($i < $tmp)
	{
		$array[] = $i;
	}
}

// 1から28213 までの配列を作る
$array2 = array();
for($i = 1 ; $i <= 28213 ; $i++)
{
	@$array2[$i] = $i;
}

foreach($array as $v1)
{
	foreach($array as $v2)
	{
		unset($array2[$v1 + $v2]);
		if($v1 <= $v2)
		{
			break;
		}
	}
}

$answer = array_sum($array2);

echo $answer;

?>
問題文