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

← Problem 51  Problem 53 →
<?php

// 6倍しても同じ桁数ということは、一番上の位は1であり、次の位は0-6 である。
// 同じ数字を含んでもいいかは問題に言及されていないので、同じ数字を含む可能性がある前提で考える。
$i = 0;
$flag = false;
while(true)
{
	if(substr($i,1,0) < 7)
	{
		$num = "1".$i;
		$array = array();
		for($j = 1 ; $j <= 6 ; $j++)
		{
			$tmp = $num * $j;
			$numlen = strlen($tmp);
			for($k = 0 ; $k < $numlen ; $k++)
			{
				@$array[$j][substr($tmp,$k,1)]++;
			}
		}
		$flag2 = true;
                foreach($array[1] as $key => $value)
                {
                        if(@$array[2][$key] != $value or @$array[3][$key] != $value or @$array[4][$key] != $value or @$array[5][$key] != $value or @$array[6][$key] != $value)
                        {
                                $flag2 = false;
                                break;
                        }
                }
		if($flag2)
		{
			$flag = true;
		}
	}
	$i++;
	if($flag)
	{
		break;
	}
}
echo $num."\n";

?>
問題文