矩阵快速幂模板
来源:互联网 发布:mac怎么格式化存储卡 编辑:程序博客网 时间:2024/05/22 04:31
先实现一次矩阵相乘O(N^3)
代码:
struct Mat{ int mat[N][N];};Mat Multiply(Mat a, Mat b){ Mat c; memset(c.mat, 0, sizeof(c.mat)); for(int k = 0; k < n; ++k) for(int i = 0; i < n; ++i) if(a.mat[i][k]) for(int j = 0; j < n; ++j) if(b.mat[k][j]) c.mat[i][j] = (c.mat[i][j] +a.mat[i][k] * b.mat[k][j])%Mod; return c;}
矩阵快速幂(mat^k),如何减少乘法运算:比如mat^11需要11次乘法,11(10)=1011(2) , 所以:mat^11=mat^8*mat^2*mat^1. 循环运算表达式mat=mat*mat, 得到mat的1,2,4,8,16……2^n次方,对应的二进制位数为1的累乘起来就行了。
Mat QuickPower(Mat a, int k){ Mat c; memset(c.mat,0,sizeof(c.mat)); for(int i = 0; i < n; ++i) c.mat[i][i]=1; for(; k; k >>= 1) { if(k&1) c = Multiply(c,a); a = Multiply(a,a); } return c;}
附:
快速幂模板,下面是计算(a^n)%k的一个模板。
int quickpow(int a,int n,int k){ int b = 1; while (n) { if (n & 1) b = (b*a)%k; n = n >> 1 ; a = (a*a)%k; } return b;}
0 0
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 快速矩阵幂模板
- Servlet与JSP-JavaWeb项目食用指南
- java多线程:18、面试题2
- servlet之数据库的增,删,改,查
- 函数work3
- 5.1判断两个字符串是否互为变形词(输入流)
- 矩阵快速幂模板
- 微信公众号,微信模版发送信息(java)
- 在php模版文件和html文件中引入js,css文件错误解决
- 【2017/4/10】认识oracle db体系结构
- G
- 剪切大的TIFF图片生成小的TIFF图片
- java异常总结
- 4-10
- jquery总结备忘