<?php
// 数字の頭は1,4,6,8,9,0ではない。(2,3,5,7のどれか)
// 数字の最後は1,2,4,5,6,8,9,0 ではない。(3,7 のどちらか)
// 右から消されていくとき、一桁目の数字となるので、途中に0,2,4,5,6,8 は使えない。(1,3,7,9)のどれか。
// 2と5は数字の頭にのみ使える。
// 0,4,6,8 はどこにも使えない数字
// 1桁の数は考慮しないと書かれているので、13からスタート、17,23,27,33,37,53,57,73,77,93,97 とチェックしていき、23が該当する一番小さい素数で、次が37 になる。
// 11個しかないと宣言されているので、11個見つかった時点でループ終了すればよい。
// 2桁の数字で、上記条件で使える素数は 13,17,37,73,97 となる。また、23,37,53,73 の4つが見つかった。
$answer = array();
$head = array(2,3,5,7);
$mid = array(1,3,7,9);
$problem = array(array(3,7));
$count = 0;
$i = 0;
while(true)
{
// $answer に入れられる数を調べる
// $problem の数の左に数をくっつけて素数になるか調べる
foreach($problem[$i] as $v)
{
foreach($head as $w)
{
$tmp = $w.$v;
$tmp2 = $tmp;
$flag = true;
while(strlen($tmp2) >= 2)
{
if(!check_prime($tmp2))
{
$flag = false;
break;
}
$tmp2 = substr($tmp2,0,strlen($tmp2) - 1);
}
if($flag)
{
$answer[] = $tmp;
}
}
}
// $answer に入れられる数を調べる
// $problem の数の左に数をくっつけて素数になるか調べる
foreach($problem[$i] as $v)
{
foreach($mid as $w)
{
$tmp = $w.$v;
if(check_prime($tmp))
{
$problem[$i + 1][] = $tmp;
}
}
}
if(count($answer) >= 11)
{
break;
}
$i ++;
}
echo array_sum($answer)."\n";
function check_prime($num)
{
$flag = true;
// 素数チェック
$sqrt = sqrt($num);
for($i = 3 ;$i <= $sqrt ; $i+=2)
{
if($num % $i == 0)
{
$flag = false;
break;
}
}
return $flag;
}
?>