快速矩阵幂模板
来源:互联网 发布:搜索引擎怎么数据分析 编辑:程序博客网 时间:2024/05/17 00:08
fn = b*fn-1 +a*fn-2 +c
#include <cstdio>#include <string>#include <cmath>#include <iostream>using namespace std;const long long M = 1000007;const long long N = 3;long long t,b,c,f1,f2;struct Node //矩阵{ long long line,cal; long long a[N+1][N+1]; Node(){ line=3,cal=3; a[0][0] = b; a[0][1] = 1; a[0][2] = 0; a[1][0] = t; a[1][1] = 0; a[1][2] = 0; a[2][0] = c; a[2][1] = 0; a[2][2] = 1; }};Node isit(Node x,long long c) //矩阵初始化{ for(long long i=0;i<N;i++) for(long long j=0;j<N;j++) x.a[i][j]=c; return x;}Node Matlab(Node x,Node s) //矩阵乘法{ Node ans; ans.line = x.line,ans.cal = s.cal; ans=isit(ans,0); for(long long i=0;i<x.line;i++) { for(long long j=0;j<x.cal;j++) { for(long long k=0;k<s.cal;k++) { ans.a[i][j] += x.a[i][k]*s.a[k][j]; ans.a[i][j]=(ans.a[i][j]+M)%M; } } } return ans;}long long Fast_Matrax(long long n) //矩阵快速幂{ if(n==1) return f1; n-=2; long long x=1,f=n,ok=1; Node ans,tmp,ch; ans.line = 1,ans.cal = 3; ans.a[0][0] = f2, ans.a[0][1] = f1 ,ans.a[0][2] = 1; while(n>0) { if(n%2) { ans=Matlab(ans,tmp); } tmp=Matlab(tmp,tmp); n/=2; } return ans.a[0][0];}int main(){ long long n,T; scanf("%lld",&T); while(T--) { scanf("%lld%lld%lld%lld%lld%lld",&f1,&f2,&t,&b,&c,&n); printf("%lld\n",Fast_Matrax(n)); } return 0;}
0 0
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 快速矩阵幂模板
- 卢梭《社会契约论》之论原始社会
- OC-电子词典的写法
- 视频使用到的器件
- 单例设计模式
- Eclipse快捷键大全
- 快速矩阵幂模板
- jni中文字符串乱码的处理方法
- 从上往下打印二叉树(剑指offer)+队列的应用
- 欢迎使用CSDN-markdown编辑器
- 加密解密数字证书相关知识
- SQL扩展之T-SQL中的数据查询语言之选择查询篇
- django 1.8 官方文档翻译:13-1-3 密码管理
- 周末总结
- ahu 395 快速矩阵幂初学 + 矩阵快速幂模板