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

← Problem 49  Problem 51 →
<?php

$prime = array(2);

$i = 3;
$answer = 0;

// まずは100万未満の素数を抽出する。

$tmp = 2;
while($i < 1000000)
{
	if(check_prime($i))
	{
		$tmp += $i;
		$prime[] = $i;
	}
	$i+=2;
}

// 2から順番に足していって、素数になったときの個数を記憶する
$count = count($prime);
$max = 0;
for($i = 0 ; $i < $count ; $i++)
{
	$tmp = 0;
	for($j = $i ; $j < $count ; $j++)
	{
		$tmp += $prime[$j];
		if(check_prime($tmp) and $max < $j - $i)
		{
			$max = $j - $i;
			$answer = $tmp;
			//echo $answer." ".$max."\n";
		}
		if($tmp > 1000000)
		{
			break;
		}
	}
}

echo $answer."\n";

function check_prime($num)
{
        $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;
}

?>
問題文