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

← Problem 23  Problem 25 →
全数チェックではなくて少し工夫した。
<?php
// 0-9 の重複無し順列なので、全部で 3,628,800 通り
// 数が多くないので全数チェックでも行ける
// 0 で始まる順列は362880 通り、

$answer = "";

$array = array(0,1,2,3,4,5,6,7,8,9);
$num = 0;
$num1 = 1000000 - 1;
$num2 = 9*8*7*6*5*4*3*2*1;
$num3 = 9;
while($num3 != 0)
{
	while($num1 - $num2 >= 0)
	{
		$num1 -= $num2;
		$num++;
	}
	echo $num." ".$num1."\n";
	$answer .= $array[$num];
	unset($array[$num]);
	$array = array_values($array);
	$num = 0;
	$num2 /= $num3;
	$num3--;
}

$answer .= $array[0];

echo "\n".$answer;

?>
問題文