フィボナッチ数列の n 番目を m で割った余りを求める

フィボナッチ数列は、前の2つの項を足し合わせることで次の項を求める数列で、最初の2つの要素は 0 と 1 です:
与えられた数 n に対して、n 番目のフィボナッチ数を m で割った余りを求めてください。
ここでは m での剰余だけが必要であり、n は非常に大きな値となる可能性があります。

入力

入力は 1 行で、2 つの整数 n (0 ≤ n ≤ ) と m (1 ≤ m ≤ 50) が与えられます。

出力

プログラムは の結果を出力してください。

入力
出力
0 5
0
1 5
1
6 5
3

解説

  1. fib(0) = 0 ⇒ 0 mod 5 = 0
  1. fib(1) = 1 ⇒ 1 mod 5 = 1
  1. fib(6) = 8 ⇒ 8 mod 5 = 3
 
Hint 1
フィボナッチ数を m で計算する場合、次の数は常に直前の2つに依存するため、ある時点でパターンが繰り返され始めます。多くの値を m で求めてみると、一周して再び同じパターンが出てくることがわかるでしょう。
Hint 2
数列がある長さで繰り返されるので、すべての値を順に計算しなくても、直接 n 番目のフィボナッチ数を求められます。

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue