uva 10870 Recurrences(数学:矩阵快速幂)
来源:互联网 发布:三星解网络锁工具 编辑:程序博客网 时间:2024/06/03 19:50
给出一个递推关系,让你求关系中的第n项
一般遇到数据比较大的递推都可以考虑使用矩阵快速幂
这里矩阵不再描述,白书上有题解
代码如下:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAXN 20using namespace std;int x[MAXN];int MOD, n, d;struct Matrix { int m[MAXN][MAXN];}A, F;Matrix Mul(Matrix a, Matrix b) { Matrix res; for(int i=1; i<=d; ++i) { for(int j=1; j<=d; ++j) { res.m[i][j] = 0; for(int k=1; k<=d; ++k) { res.m[i][j] = (res.m[i][j]+a.m[i][k]*b.m[k][j]%MOD+MOD)%MOD; } } } return res;}Matrix Pow(Matrix a, int b) { Matrix res; memset(res.m, 0, sizeof(res.m)); for(int i=1; i<=d; ++i) res.m[i][i] = 1; while(b) { if(b & 1) res = Mul(res, a); a = Mul(a, a); b >>= 1; } return res;}int main(void) { while(~scanf("%d%d%d", &d, &n, &MOD) && (d||n||MOD)) { memset(A.m, 0, sizeof(A.m)); memset(F.m, 0, sizeof(F.m)); for(int i=1; i<=d; ++i) scanf("%d", &x[i]); for(int i=1; i<d; ++i) A.m[i][i+1] = 1; for(int i=1; i<=d; ++i) { A.m[d][i] = x[d-i+1]%MOD; } for(int i=1; i<=d; ++i) { scanf("%d", &F.m[i][1]); F.m[i][1] %= MOD; } Matrix tmp = Pow(A, n-d); Matrix ans = Mul(tmp, F); printf("%d\n", (ans.m[d][1]+MOD)%MOD); } return 0;}
0 0
- uva 10870 Recurrences(数学:矩阵快速幂)
- uva 10870 Recurrences(矩阵快速幂)
- UVA - 10870 Recurrences (矩阵快速幂)
- UVA 10870 Recurrences(矩阵快速幂)
- UVa 10870 - Recurrences (矩阵构造 矩阵快速幂)
- UVA 10870 Recurrences 矩阵快速幂
- UVa 10870 Recurrences / 矩阵快速幂
- UVA 10870 - Recurrences(矩阵快速幂)
- uva 10870 - Recurrences(矩阵快速幂)
- UVA - 10870 Recurrences (矩阵快速幂)
- UVA - 10870 Recurrences 矩阵快速幂
- UVa - 10870 - Recurrences ( 矩阵快速幂 )
- UVa 10870 Recurrences (矩阵快速幂)
- Uva 10870 Recurrences 解题报告(矩阵快速幂)
- UVA 10870 Recurrences(构造矩阵和快速幂)
- 【矩阵快速幂】Recurrences UVA
- 递推关系( Recurrences, UVa 10870)(矩阵快速幂)
- uva 10870 - Recurrences(矩阵乘法)
- Windows下的oracle数据库的安装、卸载以及初等常见问题
- Graphics平移原点及向上向右方向为正方式变换
- Oracle数据库连接检测(Shell)
- 分治算法实现归并排序
- Swift -- 中文版两大官方文档汇总
- uva 10870 Recurrences(数学:矩阵快速幂)
- OC第四课
- Prime算法JavaEclipse实现代码完整版
- Valid signing identity not found解决办法(原有IDP私钥丢失)及Certificate、App ID、Devices、Provisioning Profiles之间区别
- 数组相关问题
- android中像素单位dp、px、pt、sp的比较
- swing开发图形界面工具配置(可自由拖控件上去)
- 怎么读openstack组件的日志文件?
- HDU 4716 A Computer Graphics Problem