【洛谷P1939】【模板】矩陣加速(數列)
阿新 • • 發佈:2018-11-10
題目大意:
題目連結:https://www.luogu.org/problemnew/show/P1939
設
。求
。
前言
這篇部落格並不是專門來介紹矩陣乘法加速遞推的。
但是既然是模板題就提一下吧。
什麼是矩陣乘法?
下面是來自度孃的解釋:
也就是說,對於兩個矩陣
和
,在滿足第一個矩陣的列數=第二個矩陣的行數
時,這兩個矩陣就可以相乘。那麼假設
是
的矩陣,
是
的矩陣,那麼他們相乘得到的矩陣
就是一個
的矩陣。
而且對於矩陣
的任意元素
,都等於矩陣A第i行的所有數字分別乘上矩陣B第j列的所有數字之和
。(其實就是上圖的公式)
矩陣乘法和遞推的關係?
矩陣乘法和遞推關係最密切的例子就是斐波那契數列了。↓
現在看不懂沒關係,可以慢慢理解。
我們知道,斐波那契數列有這樣的定義:
那麼如果我們有一個
的矩陣,其中第一行分別是
和
。我們的目標是把第一行承上一個矩陣變成
和
。那麼應該怎麼辦呢?
首先,矩陣
和矩陣
都含有
這一項。那麼就先從這裡下手。
我們知道,矩陣
的
在第
行第
列。那麼,根據公式,可以得到
也就是說
那麼很明顯,我們可以得到
。這樣可以保證進行矩陣乘法之後
是
。
那麼現在來看矩陣
中的
。我們要保證的是
也就是說