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

← Problem 45  Problem 47 →
<?php

$answer = 0;
// 奇数を順番に調べていく。
$i = 3;
while(true)
{
	// 素数か否かを調べる
	$flag = true;
	if(!check_prime($i))
	{
		$j = 1;
		// 素数でない場合、2の階乗を引いていき、素数か否かを調べる
		while($i - $j * $j * 2 > 0)
		{
			if(check_prime($i - $j * $j * 2))
			{
				$flag = false;
				break;
			}
			$j++;
		}
	}
	else
	{
		$flag = false;
	}
	if($flag)
	{
		$answer = $i;
		break;
	}
	$i+=2;
}

echo $answer."\n";

function check_prime($num)
{
        global $answer;
        $flag = true;
        if($num % 2 != 0)
        {
                // 素数チェック
                $sqrt = sqrt($num);
                for($i = 3 ;$i <= $sqrt ; $i+=2)
                {
                        if($num % $i == 0)
                        {
                                $flag = false;
                                break;
                        }
                }
        }
	else
	{
		$flag = false;
	}
	return $flag;
}

?>
問題文