<?php // 問題として、3,4,5,6,7,8 の順番と思っていたけど、どうやっても解が出ない。 // 順番を変えて調べるようにしたら解が出た。 $answer = array(); $flag = true; $n = 1; while(true) { $p3 = $n * ($n + 1) / 2; if($p3 >= 1000 and $p3 < 10000) { $p[3][] = $p3; $p[9][] = $p3; } $p4 = $n * $n; if($p4 >= 1000 and $p4 < 10000) { $p[4][] = $p4; } $p5 = $n * ( 3 * $n - 1) / 2; if($p5 >= 1000 and $p5 < 10000) { $p[5][] = $p5; } $p6 = $n * ( 2 * $n - 1); if($p6 >= 1000 and $p6 < 10000) { $p[6][] = $p6; } $p7 = $n * ( 5 * $n - 3) / 2; if($p7 >= 1000 and $p7 < 10000) { $p[7][] = $p7; } $p8 = $n * ( 3 * $n - 2); if($p7 >= 1000 and $p8 < 10000) { $p[8][] = $p8; } if($p3 >= 10000) { break; } $n++; } $tmp = array(3=>3,4=>4,5=>5,6=>6,7=>7); foreach($p[8] as $k => $v) { if($flag) { $answer[ 0 ] = $v; check($p,8,$k,$tmp); } } print_r($answer); echo array_sum($answer)."\n"; function check($p,$num,$key,$array) { global $answer; global $flag; if(count($array) == 0) { if(substr($answer[0],2,2) == substr($answer[5] , 0 , 2)) { $flag = false; } } if($flag) { foreach($array as $value) { foreach($p[$value] as $k => $v) { if(substr($p[$num][$key],0,2) == substr($v , 2 , 2) and $flag) { unset($array[$value]); $answer[ 5 - count($array) ] = $v; check($p,$value,$k,$array); $array[$value] = $value; } } } } } ?>