Aランク・スキルチェック過去問題セットのサムネイル
「K ボナッチ数列」を解くために:part5 Haskell(Beta)編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

説明


前の問題では累積和を用いて N 項目を求める方法を紹介しました。
ここでは別の方法を紹介します。
前の問題と同様に、K ボナッチ数列の i 項目を KB_i とします。
N ≦ K の場合は K ボナッチ数列の定義より KB_N = 1 であるため、以下 N > K の場合を考えます。
KB_N = KB_{N-K} + KB_{N-K+1} + ... + KB_{N-2} + KB_{N-1} です。
同様に、KB_{N-1} = KB_{N-K-1} + KB_{N-K} + KB_{N-K+1} + ... + KB_{N-2} です。
この 2 つの式を用いて KB_N を高速に求める方法を考えてみましょう。

問題


整数 K と N が与えられるので、 K ボナッチ数列の N 項目を 10000 で割ったあまりを求めてください。

入力される値

入力は以下のフォーマットで与えられます。

K
N


・1 行目には 1 つの整数 K が与えられます。
・2 行目には 1 つの整数 N が与えられます。
・入力は 2 行となり、末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

答えを 1 行で出力してください。
最後は改行し、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ K ≦ 100000
・K ≦ N ≦ 200000

入力例1

3
10

出力例1

105

入力例2

2
15

出力例2

610

入力例3

8734
23128

出力例3

3569

問題一覧へ戻る

  1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランク・スキルチェック過去問題セット(言語選択)
  4. 問題一覧 Haskell(Beta)編
  5. 「K ボナッチ数列」を解くために:part5 Haskell(Beta)編
ページの先頭へ戻る