結果

問題 No.718 行列のできるフィボナッチ数列道場 (1)
コンテスト
ユーザー koi_kotya
提出日時 2018-07-27 23:14:06
言語 Ruby
(4.0.1)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
AC  
実行時間 78 ms / 2,000 ms
コード長 475 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 264 ms
コンパイル使用メモリ 9,088 KB
実行使用メモリ 14,976 KB
最終ジャッジ日時 2026-03-26 11:42:18
合計ジャッジ時間 2,590 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #
raw source code

$exp = Hash.new(nil)
$mod = 1000000007
def mtr(a,b)
  [[(a[0][0]*b[0][0]+a[0][1]*b[1][0])%$mod,(a[0][0]*b[0][1]+a[0][1]*b[1][1])%$mod],[(a[1][0]*b[0][0]+a[1][1]*b[1][0])%$mod,(a[1][0]*b[0][1]+a[1][1]*b[1][1])%$mod]]
end

def exp(n)
  if $exp[n]
    $exp[n]
  elsif n == 1
    [[1,1],[1,0]]
  elsif n == 0
    [[1,0],[0,1]]
  elsif n%2 == 0
    $exp[n] = mtr(exp(n/2),exp(n/2))
  else
    $exp[n] = mtr(exp(n/2),exp(n/2+1))
  end
end

n = gets.to_i
p exp(n)[0].inject(:*)%$mod
0