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