<?php
// 8個素数になるためには、少なくとも2以下から始まらなければいけない。2,3,4,5,6,7,8,9
// 1の位は連続する数にはならない。
// 置き換えて素数になる数を8つ以上にするためには、置き換える数は3の倍数である必要がある。
// 最小は1111から
$i = 1111;
while(true)
{
// 一桁目を除く残りの桁から、0,1,2 のいずれかで、同じ数が3つある。
// 4つ、5つある場合はどれか3つを抽出する必要があるが、なんとなく考慮しなくても解ける気がする。
$tmp = substr($i,0,-1);
$tmp0 = substr_count($tmp,"0");
$tmp1 = substr_count($tmp,"1");
$tmp2 = substr_count($tmp,"2");
if($tmp0 == 3 or $tmp1 == 3 or $tmp2 == 3)
{
$count = 1;
// 同じ数が3つある場合に素数かどうかチェック
if(check_prime($i))
{
if($tmp0 == 3)
{
$j = 0;
}
else if($tmp1 == 3)
{
$j = 1;
}
else
{
$j = 2;
}
$k = $j + 1;
while($k <= 9)
{
$num = str_replace($j,$k,$tmp).substr($i,-1);
if(check_prime($num))
{
$count++;
}
if($k - $count > 1)
{
break;
}
$k++;
}
}
if($count == 8)
{
break;
}
}
$i += 2;
}
echo $i."\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;
}
?>