<?php // 1が2回続いた後、2の倍数になる。 // 1,2,1,1,4,1,1,6,1,1,8 // 分母は (前の分母 × 順列1,2,1,1,4...) + (前の前の分母) // 分子は (前の分子 × 順列1,2,1,1,4...) + (前の前の分子) // $bunbo = array(1=>1,2=>1); // 片方だけで完結できるので、求めるのは分子だけ $bunshi = array(1=>array(0=>2),2=>array(0=>3)); $pow10 = pow(10,10); for($i = 3; $i <= 100 ; $i++) { // 連分数の作成 // (2 + 1/1) = 3/1; // (2 + 1/(1+1/2)) = 2 + 1/(3/2) = 2 + 2/3 = 8/3 // (2 + 1/(1+1/(2 + 1/1)) = 2 + 1/(1+1/3) = 2 + 1/(4/3) = 2 + 3/4 = 11/4 if($i % 3 == 0 ) { for($j = 0 ; $j < count($bunshi[$i - 1]) ; $j++) { $bunshi[$i][$j] = $bunshi[$i - 1][$j] * 2 * (int) ($i / 3) + $bunshi[$i -2][$j]; } //$bunbo[$i] = $bunbo[$i - 1] * 2 * (int)($i / 3) + $bunbo[$i -2]; } else { for($j = 0 ; $j < count($bunshi[$i - 1]) ; $j++) { @$bunshi[$i][$j] = $bunshi[$i - 1][$j] + $bunshi[$i -2][$j]; } //$bunbo[$i] = $bunbo[$i - 1] + $bunbo[$i -2]; } foreach($bunshi[$i] as $k => $v) { while($v >= $pow10) { @$bunshi[$i][$k+1]++; $bunshi[$i][$k] -= $pow10; $v -= $pow10; } } } $answer = 0; foreach($bunshi[count($bunshi)] as $v) { $len = strlen($v); for($i = 0 ; $i < $len ; $i++) { $answer += substr($v,$i,1); } } echo $answer."\n"; ?>