Yukicoder 980 Fibonacci Convolution Hard
問題の概要
数列 を以下で定める。
, ,
正整数 に対し、 を で割った余りを求めよ。
制約
解法
この問題では が 個与えられますが、 のとりうる値の個数と とではオーダーがあまり変わらないので、とりうる値全てについて答を求めることにします。つまり、 に対して、 以下の 全てに対して答を求めます。
上図の青枠で囲ったような部分の和 を全て求めるという問題になりますが、愚直にやると かかるので、何か工夫が必要です。このようなとき、1つの方法としては、 というように順に求めていきながら、少し前(1つ前とか)の結果を使って簡単に が計算できると嬉しいです。そこで、数列の漸化式を見て、うまくやれるか考えてみましょう。
数列の漸化式 を以下のように書いてみます。
に関する条件 :「」
を考えたとき、 は条件を満たす
すると、条件 は、
① が条件を満たすとき、定数倍した も条件を満たす
②と が条件を満たすとき、 も条件を満たす
という性質があります。(線形性)
さて、上図の各赤丸部分が条件 を満たすので、それらの和をとると、
も条件 を満たします。
よって、 を使うと、 とわかります。
同様にして、
とわかるので、順に を求めることができます。