<?php
// 問64の応用で解けるらしい。
// 連分数をまずは求めて、
// 連分数が1つのときは、それを使用
// 連分数が2つ以上の時は、末尾のを削って使用
// また連分数が奇数の時は2乗する。
$max_answer = 0;
$answer = 0;
for($i = 1 ; $i <= 1000 ; $i++)
{
$sqrt = sqrt($i);
// 無理数か否かをチェック
if($sqrt != (int)$sqrt)
{
$tmp_array = array();
// bunbo の初期値
$tmp1 = (int)$sqrt;
$tmp2 = 1;
$tmp1_0 = 0;
$tmp2_0 = 0;
while(true)
{
$bunbo = ($i - $tmp1 * $tmp1) / $tmp2;
$bunshi = $tmp1;
$tmp3 = 0;
while($bunshi > $sqrt * -1)
{
$bunshi = $bunshi - $bunbo;
$tmp3 ++;
}
$bunshi = $bunshi + $bunbo;
$tmp3 --;
$tmp_array[] = $tmp3;
$tmp1 = $bunshi * -1;
$tmp2 = $bunbo;
if(count($tmp_array) == 1)
{
// 最初に出てくる $tmp1 と $tmp2 を覚える
$tmp1_0 = $tmp1;
$tmp2_0 = $tmp2;
}
// $tmp1_0 と $tmp1 , $tmp2_0 と $tmp2 の値が一致したら循環したということで、
// ループ終了
else if($tmp1_0 == $tmp1 and $tmp2_0 == $tmp2)
{
break;
}
}
array_pop($tmp_array);
$count = count($tmp_array);
if($count >= 2)
{
array_pop($tmp_array);
$x = array((int)$sqrt,1 + $tmp_array[0] * (int)$sqrt);
$y = array(1,$tmp_array[0]);
for($j = 1 ; $j < $count - 1; $j ++)
{
$x[] = $x[ $j ] * $tmp_array[$j ] + $x[$j - 1] ;
$y[] = $y[ $j ] * $tmp_array[$j ] + $y[$j - 1] ;
}
}
else
{
$x = array((int)($sqrt));
$y = array(1);
}
if($count % 2 == 1)
{
$tmp_answer = end($x) * end($x) + $i * end($y) * end($y);
}
else
{
$tmp_answer = end($x);
}
if($max_answer < $tmp_answer)
{
$max_answer = $tmp_answer;
$answer = $i;
}
}
}
echo $answer;