矩阵快速幂(模板)
Posted 黑.白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵快速幂(模板)相关的知识,希望对你有一定的参考价值。
适用于 row 和 col 相同的矩阵
没有 0 优化
#define mod 1000000007 #define MN 5 struct matrix { long long ma[MN][MN]; // row 和 col 相同 matrix(bool f) { memset( ma, 0x0000, sizeof(ma) ); if(f) // 单位矩阵 { for(int i = 1; i < MN; i++) { ma[i][i] = 1; } } } }; matrix matrix_mul(matrix a, matrix b) //不用 0 优化 { matrix mp = matrix(false); for(int i = 1; i < MN; i++) { for(int j = 1; j < MN; j++) { for(int k = 1; k < MN; k++) { mp.ma[i][j] += (a.ma[i][k] * b.ma[k][j] + mod) % mod; // +mod 为防止有负数 mp.ma[i][j] %= mod; } } } return mp; } matrix matrix_pow(matrix a, long long x) { matrix mp = matrix( true ); while( x ) { if( x & 1 ) { mp = matrix_mul(mp, a); } x >>= 1; a = matrix_mul(a, a); } return mp; }
以上是关于矩阵快速幂(模板)的主要内容,如果未能解决你的问题,请参考以下文章