矩阵快速幂模板(mark)
来源:互联网 发布:知乎 刘备 王者 编辑:程序博客网 时间:2024/05/31 19:41
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<map> #define LL long long #define MAXN 1000010 using namespace std; const int INF=0x3f3f3f3f; //----以下为矩阵快速幂模板-----// const int mod=9973; const int NUM=11;//定义矩阵能表示的最大维数 int N;//N表示矩阵的维数,以下的矩阵加法、乘法、快速幂都是按N维矩阵运算的 struct Mat{//矩阵的类 int a[NUM][NUM]; void init()//将其初始化为单位矩阵 { memset(a,0,sizeof(a)); for(int i=0;i<NUM;i++) { a[i][i]=1; } } }; Mat add(Mat a,Mat b)//(a+b)%mod 矩阵加法 { Mat ans; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { ans.a[i][j]=a.a[i][j]+b.a[i][j]; ans.a[i][j]%=mod; } } return ans; } Mat mul(Mat a,Mat b) //(a*b)%mod 矩阵乘法 { Mat ans; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { ans.a[i][j]=0; for(int k=0;k<N;k++) { ans.a[i][j]+=a.a[i][k]*b.a[k][j]; } ans.a[i][j]%=mod; } } return ans; } Mat power(Mat a,int num)//(a^n)%mod 矩阵快速幂 { Mat ans; ans.init(); while(num) { if(num&1) { ans=mul(ans,a); } num>>=1; a=mul(a,a); } return ans; } Mat pow_sum(Mat a,int num)//(a+a^2+a^3....+a^n)%mod 矩阵的幂和 { int m; Mat ans,pre; if(num==1) return a; m=num/2; pre=pow_sum(a,m); ans=add(pre,mul(pre,power(a,m))); if(num&1) ans=add(ans,power(a,num)); return ans; } void output(Mat a)//输出矩阵 { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { printf("%d%c",a.a[i][j],j==N-1?'\n':' '); } } } //----以上为矩阵快速幂模板-----// int main() { int t,n,k,ans,i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); N=n; ans=0; Mat a,temp; for(i=0;i<N;i++) { for(j=0;j<N;j++) { scanf("%d",&a.a[i][j]); } } temp=power(a,k); for(i=0;i<N;i++) { ans=(ans+temp.a[i][i])%mod; } printf("%d\n",ans); } return 0; }
阅读全文
0 0
- 矩阵快速幂模板(mark)
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 线段树 poj2528 Mayor's posters
- 论文记录_MobileNets Efficient Convolutional Neural Networks for Mobile Vision Application
- 【实践课】PB问题记录
- Java中中的异常、异常的分类
- <span>的用途
- 矩阵快速幂模板(mark)
- Window函数库以及hz2016.space的开源
- AVR开发 Arduino方法(一) 端口子系统
- Android 最常用的设计模式一 安卓源码分析—单例模式singleInstance
- 51 nod 1428 活动安排 (线段的最大重合条数)
- 数据结构、算法与编程(1)
- 腾讯笔试题913——数字转换机
- CSS3-阴影、倒影、渐变学习笔记
- javaEE 使用表单上传图片