<?php // 普通に全数チェックを行うと、すごく時間がかかる。 // とりあえず、合計33427 という数が見つかったので、最大素数が33427 までの間でもういっかい。 $prime = array(3=>array(0=>0)); $i = 7; $flag = false; $answer = array(); $max = 0; while(true) { if(check_prime($i)) { $prime[$i] = array(); foreach($prime as $k => $v) { $tmp = $i.$k; $tmp2 = $k.$i; if(check_prime($tmp) and check_prime($tmp2)) { $prime[$i][] = $k; } } $tmp3 = array(); if(count(@$prime[$i]) > 0) { foreach($prime[$i] as $k => $v) { $answer = array($i); $max = 0; check_len($v,$tmp3,2); if($max > 4) { $flag = true; break; } $tmp3[] = $v; } } if($flag) { break; } } $i+=2; } echo array_sum($answer)."\n"; function check_len($key , $array , $num) { global $prime; global $answer; global $max; $answer[$num] = $key; if($max < $num) { $max = $num; } $tmp = array_intersect($prime[$key] , $array); if(count($tmp) > 0) { $tmp3 = array(); foreach($tmp as $v) { if($max < 5) { check_len($v,$tmp3,$num+1); $tmp3[] = $v; } } } } 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; } ?>