矩阵快速幂
来源:互联网 发布:magento2 cms block 编辑:程序博客网 时间:2024/06/05 19:28
1113 矩阵快速幂
基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注
给出一个N * N的矩阵,其中的元素均为正整数。求这个矩阵的M次方。由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果。
Input
第1行:2个数N和M,中间用空格分隔。N为矩阵的大小,M为M次方。(2 <= N <= 100, 1 <= M <= 10^9)
第2 - N + 1行:每行N个数,对应N * N矩阵中的1行。(0 <= N[i] <= 10^9)
Output
共N行,每行N个数,对应M次方Mod (10^9 + 7)的结果。
Input示例
2 3
1 1
1 1
Output示例
4 4
4 4
#include <iostream>#include <algorithm>#include <stdio.h>#include <cstring>#include <cmath>using namespace std;const long long mod=1000000007;long long a[150][150];long long b[150][150];long long c[150][150];long long s[150][150];int d[10000];int main(){ int n,m; while(cin>>n>>m) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) cin>>a[i][j]; } memset(d,0,sizeof(d)); i=0;j=0; long long t=m; while(t>0) { if(t%2==1) { d[i]=j; //cout<<d[i]<<' '<<i<<endl; i++; } t=t/2; j++; } int w=i; for(int r=0;r<w;r++) { for(i=0;i<n;i++) for(j=0;j<n;j++) c[i][j]=a[i][j]; while(d[r]--) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { long long ss=0; for(int k=0;k<n;k++) { ss+=c[i][k]*c[k][j]%mod; } b[i][j]=ss%mod; } } for(i=0;i<n;i++) for(j=0;j<n;j++) c[i][j]=b[i][j]; } if(r==0) { for(i=0;i<n;i++) for(j=0;j<n;j++) s[i][j]=c[i][j]; } else { for(i=0;i<n;i++) { for(j=0;j<n;j++) { long long ss=0; for(int k=0;k<n;k++) { ss+=s[i][k]*c[k][j]%mod; } b[i][j]=ss%mod; } } for(i=0;i<n;i++) for(j=0;j<n;j++) s[i][j]=b[i][j]; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { cout<<s[i][j]<<' '; } cout<<endl; } }}
0 0
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- poj3070--矩阵 快速幂
- POJ3233矩阵快速幂
- poj3070Fibonacci 矩阵快速幂
- 矩阵的快速幂
- 矩阵快速幂
- 矩阵的快速幂
- jdk详解
- poj 1035 <set + 指针移动 解决 单词检测>
- Mysql常用命令详解
- 2016太原网络营销师解说怎样让产品盈利,你知道吗?
- NodeJS学习笔记之FS文件模块
- 矩阵快速幂
- Js中call、apply的用法及拓展
- linux命令执行后的 返回值与错误代码
- MySQL创建用户与授权
- java中的char类型
- object类的成员方法
- 实例化和初始化的区别
- 升级 XCode 之后,插件就失效了——便捷解决方案
- VC++动态链接库(DLL)编程深入浅出