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

← Problem 25  Problem 27 →
答えは感覚的に素数に絞れるような気がするけど、なんとなくな理由なので全数チェック。
<?php

// あまりの数が同じになったとき、循環したとみなせる。
// 余りが0になったとき、循環はしない

$answer = 0;
$max_cycle = 0;

for($i = 2 ; $i < 1000 ; $i++)
{
	$bunshi = 10;
	$array = array();
	while(true)
	{
		while($bunshi < $i)
		{
			$bunshi *= 10;
		}
		$bunshi = $bunshi % $i;
		$start_cycle = array_search($bunshi,$array,true);
		if($bunshi == 0 or $start_cycle !== false)
		{
			$tmp = count($array) - $start_cycle;
			break;
		}
		else
		{
			$array[] = $bunshi;
		}
	}
	if($max_cycle < $tmp)
	{
		$max_cycle = $tmp;
		$answer = $i;
	}
}
echo $answer;
?>
問題文