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

← Problem 34  Problem 36 →
<?php

// Problem 10 と同様に素数を求める。
// 2を除き、それ以外の素数は全て奇数なので、奇数だけ調べる。
// 循環素数なので、数字の中に 2,4,5,6,8,0 が入っていてはいけない。

// 調査対象は奇数だけなので、2は除外しておく。
$prime = array(3,5,7);
$answer_array = array(2,3,5,7);

// 調査対象は7 の次の奇数から
$num = 7;

while($num < 1000000)
{
        $num += 2;
        $sqrt = sqrt($num);
        $flag = true;
        foreach($prime as $v)
        {
                if($num % $v == 0)
                {
                        $flag = false;
                        break;
                }
                if($sqrt < $v)
                {
                        break;
                }
        }
        if($flag)
        {
		$prime[] = $num;
		if(strpos($num,"2") === false and strpos($num,"4") === false and strpos($num,"5") === false and strpos($num,"6") === false and strpos($num,"8") === false and strpos($num,"0") === false) 
		{
			$flag = false;
			$tmp = $num;
			$len = strlen($num);
			// 数字を回転させる
        		$flag2 = true;
			do
			{
				$tmp = substr($tmp,$len - 1,1).substr($tmp,0,$len - 1);
				echo $tmp." ";
				// tmp が素数か否かチェック
        			$sqrt = sqrt($tmp);
        			foreach($prime as $v)
        			{
                			if($tmp % $v == 0)
                			{
                			        $flag2 = false;
                			        break;
                			}
                			if($sqrt < $v)
                			{
                			        break;
                			}
        			}
			}while($tmp != $num and $flag2);
			echo "\n";
			if($flag2)
			{
				$answer_array[] = $num;
			}
		}
        }
}

$answer = count($answer_array);
echo $answer;

?>
問題文