先了複習一下線代學的一些矩陣知識吧。
矩陣的定義:
行矩陣列矩陣
單位矩陣:
矩陣相關運算
加法:
乘法
再來看看快速冪的模板(拿著杜神的板子),比較的簡短
ll powmod(ll a,ll b) return res;}
b==11為例,b=>1011,二進位制從右向左算,但乘出來的順序是 a^(2^0)*a^(2^1)*a^(2^3),是從左向右的。我們不斷的讓a*=a目的即是累乘,以便隨時對ans做出貢獻。
然後就是矩陣快速冪的模板
}上面只是簡單的計算矩陣的冪,大家會感覺很抽象,因為上述矩陣並沒有具體的含義,
現在就舉例說明矩陣快速冪在實際運用中的意義:
以最常見的斐波那契數列為例:眾所周知:斐波那契數列遞推公式為:
f[n] = f[n-1] + f[n-2]. 由f[0]=0,f[1]=1,可以遞推後面的所有數。
在以前,我們會常常用for迴圈,這是最直接的演算法。
poj 3070 題目,讓求斐波那契數列,其n更是高達10億。
直接遞推的侷限性:
(1)本題讓你遞推的斐波那契數n高達10億。測試時間僅1秒的時間,for迴圈用遞推公式遞迴導致超時。
(2)想要打表實現隨機訪問根本不可能,先把斐波那契數列求到10億,然後想去進行隨機訪問。題目未給出那麼多記憶體,陣列也開不到10億。
因此它可以用矩陣快速冪來寫。
觀察f[n] = f[n-1]+f[n-2] 第n相是由第n-1項和第n-2項遞推而來。
同理,第n+1項由第n項和第n-1項遞推而來。
因此可以用矩陣表示:
快速冪(矩陣快速冪)
求 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 會超時,這裡引入快速冪來...
快速冪 矩陣快速冪
快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...
快速冪 矩陣快速冪
快速冪 我們求a ba b ab最直接的方法就是把a乘b次這樣的話複雜度就是o n o n o n 但是在比賽時面對1e9的資料時還是會輕鬆超時的,此時就需要一種更快的乘法來幫助我們 我們把b拆成二進位制的形式得到a ba b ab a 10.01 a a1 0.01此時對b分解得到的序列10.01...