矩陣快速冪

2021-09-12 17:47:00 字數 2081 閱讀 9570

先了複習一下線代學的一些矩陣知識吧。

矩陣的定義:

行矩陣列矩陣

單位矩陣:

矩陣相關運算

加法:

乘法

再來看看快速冪的模板(拿著杜神的板子),比較的簡短

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...