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

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

問題

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

説明


前の問題で求めた累積和を用いて、K ボナッチ数列の N 項目を高速に求めることを考えます。
前の問題と同様に、K ボナッチ数列の i 項目を KB_i、i 項目までの累積和を C_i とします。
N ≦ K の場合は K ボナッチ数列の定義より KB_N = 1 であるため、以下 N > K の場合を考えます。
i 項目までの累積和 C_i は、C_i = KB_i + C_{i-1} として高速に求めることができます (C_0 = 0 とします)。
K ボナッチ数列の N 項目は N-K 項目 ~ N-1 項目の和、つまり KB_N = KB_{N-K} + KB_{N-K+1} + ... + KB_{N-1} です。
累積和は K ボナッチ数列の i 項目までの和であり、 C_i = KB_1 + KB_2 + ... + KB_i でした。
KB_N = KB_{N-K} + KB_{N-K+1} + ... + KB_{N-1} を累積和を用いた形に変形することで 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 ボナッチ数列」を解くために:part4 Haskell(Beta)編
ページの先頭へ戻る