矩阵快速幂模板
来源:互联网 发布:知乎 车枪球 编辑:程序博客网 时间:2024/06/04 18:58
HDU1575
题目链接
题目解法:矩阵快速幂裸题:(附上其他快速*)
Code:
#include <string.h>#include <stdlib.h>#include <stdio.h>#include <algorithm>#include <math.h>using namespace std;const int mod=9973;struct mx{ int a[25][25];};int n,m,x,y,k,t;int q_mul(int a,int b)//快速乘{ int c=0; while(b) { if(b&1)c=(c+a)%mod; a=(a+a)%mod; b>>=1; } return c;}int q_pow(int a,int b)快速幂{ int c=1; while(b) { if(b&1)c=q_mul(c,a)%mod; a=q_mul(a,a)%mod; b>>=1; } return c;}mx mxmul(mx a,mx b)矩阵乘{ mx c; memset(c.a,0,sizeof(c.a)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) {// for(int k=0;k<n;k++)//可以优化// {// c.a[i][j]+=(a.a[i][k]*b.a[k][j])%mod;// c.a[i][j]%=mod;// } if(!a.a[i][j])continue; for(int k=0;k<n;k++) { c.a[i][k]+=q_mul(a.a[i][j],b.a[j][k])%mod; c.a[i][k]%=mod; } } } return c;}mx mxPow(mx a,int x)//矩阵快速幂{ mx c; memset(c.a,0,sizeof(c.a)); for(int i=0;i<n;i++) c.a[i][i]=1; while(x) { if(x&1) c=mxmul(c,a); a=mxmul(a,a); x>>=1; } return c;}int main(){ scanf("%d",&t); while(t--) { mx a; memset(a.a,0,sizeof(a.a)); scanf("%d%d",&n,&k); for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { scanf("%d",&a.a[i][j]); } } a=mxPow(a,k); int sum=0; for(int i=0; i<n; i++) { (sum+=a.a[i][i])%=mod; } printf("%d\n",sum); } return 0;}
0 0
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 快速矩阵幂模板
- 144. Binary Tree Preorder Traversal
- Android面试题-解决字体适配
- 前端框架Vue.js的使用及具体页面跳转时的参数传递
- Android的listView的一级优化
- Android设置全屏方法
- 矩阵快速幂模板
- 原始ajax的基本实现步骤
- AES算法
- Android下的任务和Activity栈(以及taskAffinity属性) (2011-03-08 09:32:05)转载▼
- 正则表达式基础
- 花名 瓜枣
- 弱校联盟con#8(凸包)
- Java内部类详解
- STL实现Ugly Numbers 注解