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

← Problem 29  Problem 31 →
調べる範囲はもう少し狭くできそうだけど、そこまで時間も変わらないだろうからこのぐらいで。
<?php

// 9^5 は5桁の数字なので、最大は6桁まで。
// 999999 の和は 354294 なので、5乗の数字の和で一致する可能性があるのは 354294 が最大になる。
// 6桁目は1,2,3 のいずれか。399999と仮定すると、五乗の数字の和は295488となるので、3もあり得ない。
// 6桁目は1,2 のいずれかになる。299999と仮定すると、五条の数字の和は295277となるので、
// 2 ~ 295277 の範囲の数字を調べればよい
$answer = 0;
for($i = 2 ; $i <= 295277 ; $i++)
{
	$num = 0;
	$length = strlen($i);
	for($j = 0 ; $j < $length ; $j++)
	{
		$tmp = substr($i,$j,1);
		$num += pow($tmp , 5);
	}
	if($num == $i)
	{
		$answer+=$num;
	}
}

echo $answer;
?>
問題文