矩阵快速幂模板
来源:互联网 发布:淘宝图 编辑:程序博客网 时间:2024/06/03 23:01
#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 + 7int 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}
0 0
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 快速矩阵幂模板
- 编号出现的次数
- fragment基础篇
- 截取字符串
- 3.44
- 互联网项目系统架构经验浅谈
- 矩阵快速幂模板
- java读书笔记:练习对象引用传递
- html中table使用详解+代码
- POJ 2167 Irrelevant Elements
- 工作日志
- 一道有关Java null笔试题引发的思考
- [Leetcode] Search in Rotated Sorted Array II
- Android 带小圆圈的倒计时圆形进度条
- 微信公众号开发中遇到的问题——支付回调,分享,获取openId(三)