hdu 5667 Sequence(矩阵快速幂)
来源:互联网 发布:大富翁数据 编辑:程序博客网 时间:2024/06/05 13:34
Problem Description
Input
Output
Sample Input
15 3 3 3 233
Sample Output
190
solution:
对于递推式,取以a为底的对数,得到f[n]=c*f[n-1]+f[n-2]+b;此时用矩阵快速幂即可。
tips:
因为p为素数,且模的位置在指数,因此模p-1即可。
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn = 5;typedef long long ll;struct Mat{ int row, col; ll mat[maxn][maxn];};Mat mat_mul(Mat A, Mat B, ll p){ Mat ans; ans.row = A.row; ans.col = B.col; memset(ans.mat, 0, sizeof(ans.mat)); for (int i = 0; i < A.row; i++) for (int j = 0; j < A.col; j++) if (A.mat[i][j]) for (int k = 0; k < B.col; k++) { ans.mat[i][k] += A.mat[i][j] * B.mat[j][k]; ans.mat[i][k] %= p; } return ans;}Mat mat_pow(Mat A,ll x,ll p){ Mat C; C.col = A.row; C.row = A.col; for (int i = 0; i < C.row; i++) for (int j = 0; j < C.col; j++) C.mat[i][j] = (i == j); while (x) { if (x & 1)C = mat_mul(C, A, p); A = mat_mul(A, A, p); x >>= 1; } return C;}ll pow(ll x, ll y, ll p){ ll ans = 1; while (y) { if (y & 1)ans = (ans*x) % p; x = (x*x) % p; y >>= 1; } return ans%p;}int main(){ int t; scanf("%d", &t); while (t--) { ll n, a, b, c, p; scanf("%I64d%I64d%I64d%I64d%I64d", &n, &a, &b, &c, &p); Mat A, B; A.row = A.col = 3; A.mat[0][0] = c; A.mat[0][1] = 1; A.mat[0][2] = 1; A.mat[1][0] = 1; A.mat[1][1] = 0; A.mat[1][2] = 0; A.mat[2][0] =0; A.mat[2][1] = 0; A.mat[2][2] = 1; if (n == 1)printf("1\n"); else if (n == 2)printf("%I64d\n", pow(a, b, p)); else { B = mat_pow(A,n - 2,p-1); ll ans = B.mat[0][0] * b + B.mat[0][2]*b; printf("%I64d\n", pow(a, ans, p)); } }}
0 0
- hdu 5667 Sequence【矩阵快速幂】
- HDU 5667 Sequence(矩阵快速幂)
- hdu 5667 Sequence 矩阵快速幂
- HDU-5667 Sequence (矩阵快速幂)
- hdu 5667 Sequence(矩阵快速幂)
- HDU 5667 Sequence 【矩阵快速幂】
- HDU 5667 Sequence(矩阵快速幂)
- hdu 5667 Sequence(矩阵快速幂+费马小定理+快速幂)
- HDU 5667 Sequence (矩阵快速幂 + 费马小定理)
- [HDU 5667] Sequence (矩阵快速幂+费马小定理)
- hdu 5667 Sequence【费马小定理+矩阵快速幂】
- HDU 5667 Sequence【矩阵快速幂】【欧拉函数】
- HDU 5667 Sequence(矩阵快速幂+费马小定理)
- HDU-5667-Sequence(矩阵快速幂+费马小定理)
- hdu 5667 Sequence(BC——矩阵快速幂)
- 矩阵快速幂算法+例题(HDU 5667 Sequence)
- HDU 5667 Sequence【矩阵快速幂+费马小定理】
- HDU 5667 Sequence(数论+矩阵快速幂)
- POJ 2411 Mondriaan's Dream
- webservice 使用vs2005生成代理
- 单例模式代码
- 实现画布的效果
- java--Servlet操作注意事项
- hdu 5667 Sequence(矩阵快速幂)
- R语言向量、矩阵用法 第一节
- [LintCode] 快速幂 Fast Power
- java设计模式之简单工厂模式
- java并发-ThreadLocal
- Linux内核学习总结
- 在MyEclipse中上传项目到github的步骤(很详细)
- 《2016年两会政府工作报告》词频统计实现
- awk笔记