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

← Problem 44  Problem 46 →
<?php

// n(2n -1) は三角数になる。
// 2n - 1 = m としたとき、 n = (m + 1) / 2 となる。
// m * (m + 1)/2  となり、三角数である。
// 五角数と六角数だけ比較すればよい。

$n5 = 2;
$n6 = 2;
$pentagon = $n5 * (3 * $n5 - 1) / 2;
$hexagon = $n6 * (2 * $n6 - 1);

$i = 0;
while(true)
{
	if($pentagon < $hexagon)
	{
		$n5++;
		$pentagon = $n5 * (3 * $n5 - 1) / 2;
	}
	else if($pentagon > $hexagon)
	{
		$n6++;
		$hexagon = $n6 * (2 * $n6 - 1);
	}
	else
	{
		$i++;
		if($i == 2)
		{
			break;
		}
		else
		{
			$n5++;
			$pentagon = $n5 * (3 * $n5 - 1) / 2;
			$n6++;
			$hexagon = $n6 * (2 * $n6 - 1);
		}
	}
}
echo $pentagon."\n";

?>
問題文