矩陣快速冪模版

2021-08-20 00:16:17 字數 926 閱讀 3508

const int n=10;  

int tmp[n][n];

void multi(int a[n],int b[n],int n)

}

上訴res陣列就等同於普通快速冪初始化的1,原理想通的,這個矩陣叫單位矩陣e,性質就是e*a=a,就是1*a=a,一樣,單位矩陣就是對角線全是1其他全是0;

最終算出的結果是乙個res矩陣,具體有什麼用就看下面的應用。

應用篇主要通過把數放到矩陣的不同位置,然後把普通遞推式變成"矩陣的等比數列",最後快速冪求解遞推式:

先通過入門的題目來講應用矩陣快速冪的套路(會這題的也可以看一下套路):

例一:題目:斐波那契數列f(n),給乙個n,求f(n)%10000,n<=1e9;

(這題是可以用fibo的迴圈節去做的,不過這裡不講,反正是水題)

矩陣快速冪是用來求解遞推式的,所以第一步先要列出遞推式:

f(n)=f(n-1)+f(n-2)

第二步是建立矩陣遞推式,找到轉移矩陣:

這裡就是個矩陣乘法等式左邊:1*f(n-1)+1*f(n-2)=f(n);1*f(n-1)+0*f(n-2)=f(n-1);

這裡還是說一下構建矩陣遞推的大致套路,一般an與a(n-1)都是按照原始遞推式來構建的,當然可以先猜乙個an,主要是利用矩陣乘法湊出矩陣t,第一行一般就是遞推式,後面的行就是不需要的項就讓與其的相乘係數為0。矩陣t就叫做轉移矩陣(一定要是常數矩陣),它能把a(n-1)轉移到a(n);然後這就是個等比數列,直接寫出通項:

給一些簡單的遞推式

1.f(n)=a*f(n-1)+b*f(n-2)+c;(a,b,c是常數)

2.f(n)=c^n-f(n-1) ;(c是常數)

模版 快速冪 矩陣快速冪

原理 x yx y xy中的 y yy 轉化成二進位制數,然後每乙個 1 11 對應 x xx 的 i ii 次方 這樣把x yx y xy轉化成了x yx y xy x ax a xa x bx b xb x cx c xc 通過對 x xx 不斷翻倍的過程,來匹配y轉成二進位制的 111。如果為...

模版 矩陣快速冪

矩陣快速冪就是快速冪的矩陣用法 ll fast power ll fp a ll fp n ll fp p return ret 得到遞推公式後推出轉移矩陣然後就套模版啦 include include define mod 1000000009 define ll long long using ...

矩陣快速冪的總結以及模版

jun 碰到了挺多數列的題,線性遞推,值又很大,直接推會超時,所以去網上找題解的時候,找到了矩陣快速冪以及杜教板子,杜教板子還沒看懂,就以後再發 首先,快速冪,之前也學了整數的快速冪,複雜度是o log 2n 這裡就把模版貼一下 int poww int a,int b return ans 然後對...