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

← Problem 57  Problem 59 →
<?php

$all = 1;
$prime = 0;

$i = 1;
$tmp = 2;
while(true)
{
	for($j = 0 ; $j < 4 ; $j++)
	{
		$i+= $tmp;
		if(check_prime($i))
		{
			$prime++;
		}
		$all++;
	}
	if($prime / $all < 0.1)
	{
		break;
	}
	$tmp += 2;
}

echo (($all - 1)/2+1)."\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;
}

?>
問題文