矩阵快速幂模板
2016-09-22 14:37
369 查看
#include <stdio.h> #include <string.h> #include <iostream> struct matrix_task { typedef long long llong; typedef llong matrix[4][4]; #define rep(i) for (int i = 0; i < n; ++i) int mod; int n; void reset(matrix m, int flag) { memset(m, 0, sizeof(matrix)); rep(i) m[i][i] = flag; } void multiply(matrix a, matrix b, matrix c) { reset(c, 0); rep(i) rep(j) if (a[i][j]) rep(k) { c[i][k] = (c[i][k] + a[i][j] * b[j][k]) % mod; } } void multiply(matrix a, matrix b) { static matrix tmp; multiply(a, b, tmp); memcpy(a, tmp, sizeof(matrix)); } void power(matrix m, llong p, matrix c) { reset(c, 1); for (; p; p >>= 1) { if (p & 1) { multiply(c, m); } multiply(m, m); } } void power(matrix m, llong p) { static matrix tmp; power(m, p, tmp); memcpy(m, tmp, sizeof(matrix)); } matrix_task(int mod, int n) { this -> mod = mod; this -> n = n; } #undef rep }; #define MOD 1e9 + 7 int main() { matrix_task::llong n; std::cin >> n; matrix_task mt(MOD, 2); matrix_task::matrix o; o[0][0] = 1; o[0][1] = 1; o[1][0] = 1; o[1][1] = 0; mt.power(o, n); std::cout << o[1][0] << std::endl; return 0; //write by zhangjingzhi }
相关文章推荐
- 矩阵快速幂模板
- hdoj 1575 Tr A(矩阵快速幂,模板题)
- 矩阵快速幂模板
- Tr A (矩阵快速幂(模板))
- hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)
- Additions HNUST 1713(矩阵快速幂模板 )
- HDU 1757 A Simple Math Problem(矩阵快速幂模板)
- [模板] - 矩阵快速幂
- 矩阵快速幂模板
- 【模板】矩阵快速幂
- 【矩阵快速幂模板】
- 矩阵快速幂 模板
- 模板——矩阵快速幂
- HDU1575:Tr A(矩阵快速幂模板题)
- 矩阵快速幂模板
- Additions HNUST 1713(矩阵快速幂模板 )
- 【矩阵快速幂*模板】nyoj 301 递推求值
- 洛谷 P3390 【模板】矩阵快速幂
- 【模板】矩阵Matrix(包含矩阵快速幂)
- 洛谷 P1939 【模板】矩阵加速(数列):优化递推式的方法——矩阵快速幂