關於矩陣快速冪的相關題目的思考:
1. 第乙個問題是關於看到的一道題意較為簡單的矩陣快速冪的題目:problem of precision,就是讓求(
5+2*sqrt(6))^n
,由於他的
n次方一定為這樣的形式
xn+yn*sqrt(6)
。這樣可以由
(xn-1+yn-1*sqrt(6))*(5+2*sqrt(6))
直接得到第
n項和第
n-1項之間的係數關係,進而得到矩陣:
5 12 * (
xn-1,yn-1)^t=(xn,yn)^t
2 5
這些都不是難點,問題是為什麼用矩陣求得的係數不能直接用來乘sqrt(6),而是轉換一下?首先,我為什麼思考這個問題有二,首要是博主沒有直接給出原因,說自己這樣做很蠢,然後就是這個係數轉換的工作似乎並不好想,而且不是適用於所有類似的題目,這樣不能用就很坑了,明明都是推出來的,為什麼
xn可以用
yn就不可以用。於是我也很蠢的試了一下,果然樣例都過不去,正要回頭去看資料怎轉化的時候,突然想到了會不會是
mod的原因,因為做係數運算的時候可不帶著這個
sqrt(6),
可能會引起該進製的地方沒有進製,這樣就很坑了。於是把
mod去掉,果然與推得的結果完全相同,思考正確。
然後就是另外乙個問題,也就是如何轉換?首先我們知道根號和mod在做係數運算的時候不能同時存在,會引起進製的問題。那麼我為什麼說這個轉換方式適用面比較窄呢?因為利用共軛的性質進行的轉換對這個題目的型別有嚴格的要求,那就是括號裡的數共軛之後一定小於
1 且大於
0。共軛的性質是:可以自由出入運算符號,於是就有:(
a+b*sqrt)^n+(a-b*sqrt)=2xn,
由於取共軛之後小於1大於
0,要求為向下取整,所以所得結果為
2xn-1
。2.
若用矩陣a表示乙個圖,有邊則為
1,無邊則為
0,那麼從乙個點s過
k個點t的方案總數為,
a^k後
a[s][t]
的值。第二次見這個知識點,雖然美學離散數學的我一臉懵逼,但是這次讓我對上次那個題目有了一些理解。就是為什麼從自己到自己,當然自己到自己了,因為成環唄。所以對角線元素加一起就是方案總數。同時就有了個疑問,為什麼依然是
k次方,而不是
k+1次方,畢竟要回到自己。轉念一想,經過
k點,那本來就不算自己吧,最後再算上
...不知道這樣解釋是不是有點牽強。
構造矩陣的方法總結:
其實這裡不能說構造矩陣的方法,而應該說是找遞推式的方法。矩陣的構造其實並不是件難事,一般根據遞推式,列出相應的列向量,然後列出這個列向量的下一階,然後根據遞推關係確定矩陣即可。而且最終的矩陣並不是唯一的,這也就是說矩陣的構造不難的原因。
那麼,遞推關係應該怎麼找呢?我看過的題目大概有這樣幾種情況:
1. 裸給出遞推關係(這樣的題就是純考你知不知道矩陣快速冪怎麼寫的,實在沒什麼意思,也就是所謂的入門題,一開始最喜歡看的題種,看多了就覺得掉價了。)。
2. 隱式的給出推倒遞推關係所需要的其他一些關係式,然後讓你自己推。這種題目主要是認清你有什麼,還有什麼條件沒用,用這個條件能得到怎麼樣的關係。個人認為這類題目裡面比較好的乙個題目是:another kind of fibonacci,這個題目雖然過程複雜,但對找關係是個很好的鍛鍊。
3. 給出一種環境,根據環境推導。我覺得一般靠環境推的不多,倒是靠樣例(主要這種題一看給的資料要求特別大,而且好像這項跟之前有些關係),不行可以待定係數,最多也就是跟前面兩三項有關係,不行再加上個常數,然後根據環境調整你待定出來的公式,這樣反而好找。
4. (a+sqrt(b))^n型別,這種型別的題目一種常見的解就是遞推矩陣加共軛關係,上面已經說過,後來也有過題目驗證過思路的正確性。還有一種利用共軛關係的方法,由於知道要求
2*xn
,那麼就可以找這個和上乙個的關係解決,也就轉換成了
2中找遞推關係的題目,當然,這個比較難想。
快速冪 快速矩陣冪學習
快速冪學習 計算3 11 如果用傳統計算,則是 for i 11 s 3 速度為n 這裡利用快速冪思想 3 11 3 1 3 2 3 8 3 1的平方就是3 2,再平方就是3 8 最後再將他們乘起來就是求出來的數了,速度也達到了log n 演算法中我們可以先判斷冪指數是否為奇數,先乘乙個3,然後對剩...
矩陣快速冪學習
矩陣快速冪和普通快速冪道理一樣,主要用來加速數列的遞推,關鍵在於構造矩陣。這幾個部落格的板子挺好 題目 落谷模板題p1939 貼個 吧,沒用過載 include include include include using namespace std typedef long long ll cons...
快速冪(矩陣快速冪)
求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...