矩阵快速幂
355 字
2 分钟
矩阵快速幂
快速幂
int qp(int a, int b) { //quick_power int ans = 1; for (; b; b >>= 1) { if (b & 1) ans = (long long)ans * a; a = (long long)a * a; } return ans;}矩阵乘法
设A为的矩阵,B为的矩阵,那么称的矩阵C为矩阵A与B的乘积,记作,其中矩阵C中的第行第列元素可以表示为: 如下所示:
代码
jz operator*(const jz& x, const jz& y) //为了方便快速幂采用运算符重载{ jz z; z.n = x.n; for (int = 1; i <= z.n; ++i) for (int j = 1; j <= z.n; ++j) z.e[i][j] = INF; for (int k = 1; k <= z.n; ++k) for (int i = 1; i <= z.n; ++i) for (int j = 1; j <= z.n; ++j) z.e[i][j] += x.e[i][k] + y.e[k][j]; return z;}所以,矩阵快速幂即为作若干次矩阵乘法,代码如下:
完整代码
#define N 1010struct jz //矩阵{ short n; long long e[N][N];} a;jz operator*(const jz& x, const jz& y){ short i, j, k; jz z; z.n = x.n; for (i = 1; i <= z.n; ++i) for (j = 1; j <= z.n; ++j) z.e[i][j] = INF; for (k = 1; k <= z.n; ++k) for (i = 1; i <= z.n; ++i) for (j = 1; j <= z.n; ++j) if (x.e[i][k] + y.e[k][j] < z.e[i][j]) z.e[i][j] = x.e[i][k] + y.e[k][j]; return z;}jz qp(jz a, int b) { //quick_power jz ans = 1; for (; b; b >>= 1) { if (b & 1) ans = (long long)ans * a; a = (long long)a * a; } return ans;}文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
Problems & Errors
竞赛错题集(大概)
2
[转]骗分导论
算法新 版 骗 分 导 论
3
[转]背包九讲
算法背包问题九讲
4
C++ 运算符重载
工程运算符重载笔记
5
第二十四届电子科技大学 ACM-ICPC 程序设计竞赛 初赛游记
竞赛第一次校赛qwq
随机文章随机推荐










