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

← Problem 42  Problem 44 →
パンデジタル数の生成はProblem 41を参考にしつつとく。
<?php
// パンデジタル数を作成しながら、割り切れるか調べる。

$prime = array(3=>17,4=>13,5=>11,6=>7,7=>5,8=>3,9=>2);
$answer = 0;

$array = array(9,8,7,6,5,4,3,2,1,0);
// 配列を並び替えて、ひとつの数値にする
foreach($array as $v)
{
	create_p($array,$v,$v);
}

function create_p($array,$num1,$num2)
{
	global $prime;
	$result = array_diff($array,array($num1));
	if(count($result) > 0)
	{
		if(strlen($num2) < 3)
		{
			foreach($result as $v)
			{
				create_p($result,$v,$v.$num2);
			}
		}
		else
		{
			if(substr($num2,0,3) % $prime[strlen($num2)] == 0 )
			{
				foreach($result as $v)
				{
					create_p($result,$v,$v.$num2);
				}
			}
		}
	}
	else
	{
		check_p($num2);
	}
}

function check_p($num)
{
	global $answer;
	$answer += $num;
}
echo $answer."\n";

?>
問題文