フィボナッチ数列の 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

  2. fib(1) = 1 ⇒ 1 mod 5 = 1

  3. 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