快速矩阵幂
来源:互联网 发布:网络流行文化 编辑:程序博客网 时间:2024/06/16 09:09
/***************************************************** > File Name: matrix_factorial.cpp > Author: Yuji CAO > Mail: 1007171627@qq.com > Created Time: 六 6/10 13:30:07 2017 *****************************************************/#include<map>#include<vector>#include<unordered_set>#include<unordered_map>#include<list>#include<queue>#include<deque>#include<stack>#include<iostream>#include<set>using namespace std;typedef vector<vector<int> > matrix;class matrix_pow {public: /** * 矩阵乘法 **/ static matrix mul(const matrix& left, const matrix& right) { matrix ret = matrix_pow::mk_zero((int)left.size(), (int)right.size()); for (int i = 0; i < left.size(); ++i) { for (int j = 0; j < right[0].size(); ++j) { int tmp = 0; for (int k = 0; k < left[i].size(); ++k) { tmp += left[i][k] * right[k][j]; } ret[i][j] = tmp; } } return ret; } /** * 构造零矩阵 **/ static matrix mk_zero(int n, int m) { return vector<vector<int> >(n, vector<int>(m, 0)); } /** * 构造单元矩阵 **/ static matrix mk_unit(int n) { matrix ret = vector<vector<int> >(n, vector<int>(n, 0)); for (int i = 0; i < n; ++i) { ret[i][i] = 1; } return ret; } /** * 快速矩阵幂 **/ matrix pow(matrix& A, int n) { matrix tmp = A; matrix ret = matrix_pow::mk_unit((int)A.size()); while (n) { if (n & 1) { ret = matrix_pow::mul(ret, tmp); // } tmp = matrix_pow::mul(tmp, tmp); //求A^1,A^2,A^4,...,A^n n = n >> 1; } return ret; }};int main() { matrix_pow mp; int s; cin>>s; matrix A(s, vector<int>(s, 0)); for (int i = 0; i < s; ++i) { for (int j = 0; j < s; ++j) { cin>>A[i][j]; } } int n; cin>>n; matrix ret = mp.pow(A, n); for (int i = 0; i < s; ++i) { for (int j = 0; j < s; ++j) { cout<<ret[i][j]<<"\t"; } cout<<endl; } return 0;}
阅读全文
0 0
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- poj3070--矩阵 快速幂
- POJ3233矩阵快速幂
- poj3070Fibonacci 矩阵快速幂
- 矩阵的快速幂
- 矩阵快速幂
- 矩阵的快速幂
- ECMAScript6 给对象实现 iterator 方法
- UVa 712 S-Trees——进制转化
- 产品经理业务流程图的绘制流程
- Android
- 每逢高考必有雨?来看看历年来高考期间天气大数据/智库2861
- 快速矩阵幂
- Keil 链接错误 Error: L6406E: No space in execution regions with .ANY selector matching
- 一次被Nginx、openVPN、CentOS来回折腾的记录
- C#中判断SQL Server数据库是否连接成功
- C#_e.Handled用法
- 『ORACLE』数据文件中有‘dbs/MISSING00007’文件(11g)
- 安装nginx
- Linux Sudo 史上最大bug
- 平衡二叉树