模板 矩陣的快速冪

2022-05-01 23:42:17 字數 2847 閱讀 2178

原理:

$\left( }

}}\\

}}\end} \right) = \left( }

1&1\\

1&0\end} \right)\left( \begin

}1}}\\

\end \right)$

記這個矩陣為a,則有

$\left( }

}}\\

}\end} \right) = \left( \begin

\\\end \right)$

注意這種初始化方式,matrix為只有乙個二維陣列的結構體

1

struct

matrix2;

5 matrix ans = ;

9 matrix base = ;

第一種要注意,界限的確定,要保證符合所有矩陣。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7

struct

mat;

10 ll n=10

;11 ll mod=10000

;12 mat mul(mat &a,mat &b);

14for(int i=0;i<2;i++)19}

20}21return

c;22}23

mat pow(mat a,ll n);

25 b.m[0][0]=b.m[1][1]=1;26

while(n>0)31

return

b;32}33

intmain();

35 a.m[0][0]=a.m[1][0]=a.m[0][1]=1

;36 a=pow(a, n);

37 printf("

%lld\n

",a.m[1][0

]);38 }

1 #include2

using

namespace

std;

3 typedef long

long

ll;4 typedef vectorvec;

5 typedef vectormat;

6 ll n=10;7

const

int m=10000

;8 mat mul(mat &a,mat &b)15}

16}17return

c;18

} 19

20mat pow(mat a,ll n)

25while(n>0)30

return

b;31}32

intmain()

再介紹一題

推理過程如下:

$f\left( n \right) = s\left( n \right) - s\left( \right);$

又有$f\left( n \right) = p*f\left( \right) + q*f\left( \right)$

所以 $s\left( n \right) - s\left( \right) = p*\left( \right) - s\left( \right)} \right) + q*\left( \right) - s\left( \right)} \right)$

$s\left( n \right) = \left( \right)*s\left( \right) + \left( \right)*s\left( \right) - q*s\left( \right)$

推到這裡你應該知道怎麼把它化成矩陣乘法的形式了吧?注意到右邊有三個s(x)項所以矩陣遞推式左邊也要有三項寫出來就是

化簡一下

所以第s項到第e項的和就是s(e)-s(s-1) 注意是s(s-1)

解題方式與上面類似

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7 ll mod=1000000009;8

struct

mat;

11ll l,r,res1,res2;

12 mat a=;

16 mat mul(mat &a,mat &b);

18for(int i=0;i<4;i++)23}

24}25return

c;26}27

28mat mod_pow(mat a,ll n);

30 b.m[0][0]=b.m[1][1]=b.m[2][2]=b.m[3][3]=1;31

while(n>0)36

return

b;37}38

39 ll res(mat &a)

4243

intmain()

50if(r==0) res2=1;51

else

55 ll ans=(res2-res1+mod)%mod;

56 printf("

%lld\n

",ans);57}

58 }

矩陣快速冪模板

剛學了矩陣快速冪,花了點時間把之前的 修改一下寫成了矩陣類,就當做模板了.話不多說下面貼 首先是標頭檔案和巨集定義什麼的 include include include using namespace std define inf 1000000000 define maxm 20 define m...

矩陣快速冪模板

矩陣快速冪 o log n nyoj301 580ms 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給你乙個遞推公式 f x a f x 2 b f x 1 c 並給你f 1 f 2 的值,請求出f n 的值,由於f n 的值可能過大,求出f n 對1000007取模後的...

矩陣快速冪模板

struct mat mat operator const mat c return res 上面是我的基本矩陣快速冪模板,其實矩陣快速冪難的不是你怎麼寫,難的是你矩陣怎麼構造。矩陣的構造,就是找遞推關係。要把需要用到的遞推關係包含操作矩陣上去。找到合適的初始向量和合適的操作矩陣,你基本就可以完成題...