模板 代數 矩陣乘法和矩陣快速冪

2021-08-06 06:56:00 字數 1863 閱讀 7212

設a為m*p的矩陣,b為p*n的矩陣,那麼稱m*n的矩陣c為矩陣a與b的乘積,記作c=

ab,其中矩陣c中的第 i 行第 j 列元素可以表示為:(a

b)ij

=∑k=

1pai

kbkj

=ai1

b1j+

ai2b

2j+⋯

+aip

bpj

1.當矩陣 a 的列數等於矩陣 b 的行數時, a 與 b 可以相乘。

2.矩陣 c 的行數等於矩陣 a 的行數, c 的列數等於 b 的列數。

3.乘積 c 的第 m 行第 n 列的元素等於矩陣 a 的第 m 行的元素與矩陣 b 的第 n 列對應元素乘積之和。

1.乘法結合律: (a

b)c=

a(bc

) 2.乘法左分配律:(a

+b)c

=ac+

bc3.乘法右分配律:c(

a+b)

=ca+

cb4.對數乘的結合性k(

ab)=

(ka)

b=a(

kb)

5.矩陣乘法一般不滿足交換律

struct matrix;

matrix mul(matrix x,matrix y)//矩陣乘法

與數的快速冪原理相同,只不過運算物件換成了矩陣。

數的快速冪請看

矩陣快速冪能在o(

n3lo

g2k)

的時間內算出ak

,其中a是乙個矩陣。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int mxl=103,mxr=103;

struct matrixres,ori;//res:單位矩陣 ,ori:輸入的矩陣

ll p=1000000007,k;

void init()

matrix mul(matrix x,matrix y)//矩陣乘法

return t;

}void matrixmodpow(ll k)//矩陣快速冪

}void print(matrix x)//列印矩陣

}int main()

#include 

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int mxl = 103,mxr = 103;

const ll mod = 1e9+7;

struct matrix

matrix operator * (const matrix &b) const

matrix modpow(ll b)

return res;

}inline

void read(int ll,int rr)

inline

void write()

}};ll n,k;

matrix a,b;

int main()

具體請看我的這一篇部落格:

快速冪,矩陣乘法,矩陣快速冪

快速冪利用二進位制 複雜度 log級 include include include include using namespace std typedef long long ll typedef unsigned long long ull int q power int a,int b,int...

那啥,,矩陣乘法,矩陣快速冪模板

這個是乘法加剪枝的。mat operator mat a,mat b return c 這個是自己剛剛改的剪枝,快了30ms,趕腳差不多啦。可能自己寫的用得順手。用的時候記得改 16 struct node mul node x,node y return z 然後這個是連乘的。mat operat...

矩陣快速冪模板

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