【codevs1732】Fibonacci数列 2(矩阵快速幂)
来源:互联网 发布:sql server 2005安装 编辑:程序博客网 时间:2024/05/22 13:13
题目描述
传送门
题解
矩阵快速幂模板题,构造的矩阵为
这样的话,先对构造的这个矩阵进行快速幂,然后再与矩阵
相乘,就可以得出最后的答案。(不信的话你可以自己算一下)
矩阵乘法满足分配律和结合律。
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long longconst LL mod=1e9+7;struct hp{ LL a[5][5];}con;LL n;LL ans[5][5],fib[5][5];inline hp work(hp a,hp b){ hp c; memset(c.a,0,sizeof(c.a)); for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) for (int k=1;k<=2;++k) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod; return c; }inline hp fast_pow(hp a,LL p){ hp ans=con; for (;p;p>>=1,a=work(a,a)) if (p&1) ans=work(ans,a); return ans;}int main(){ while (~scanf("%lld",&n)){ if (n==1||n==2){ printf("1\n"); continue; } con.a[1][1]=con.a[1][2]=con.a[2][1]=1; con.a[2][2]=0; if (n>3) con=fast_pow(con,n-3); fib[1][1]=fib[2][1]=1; memset(ans,0,sizeof(ans)); for (int i=1;i<=2;++i) for (int j=1;j<=1;++j) for (int k=1;k<=2;++k) ans[i][j]=(ans[i][j]+con.a[i][k]*fib[k][j]%mod)%mod; printf("%lld\n",ans[1][1]); }}
0 0
- 【codevs1732】Fibonacci数列 2(矩阵快速幂)
- 【codevs1732】Fibonacci数列 2(矩阵快速幂)
- Codevs1732 Fibonacci数列2
- Codevs_P1732 Fibonacci数列 2(矩阵快速幂)
- Fibonacci数列(矩阵乘法快速幂)
- Fibonacci数列(矩阵乘法快速幂)
- fibonacci数列矩阵快速幂
- POJ-3070 Fibonacci(矩阵快速幂求Fibonacci数列)
- NYOJ 题目148 fibonacci数列(二)(矩阵快速幂)
- 【codevs 1250】Fibonacci数列(矩阵快速幂)
- nyoj 148 fibonacci数列(二)(矩阵快速幂)
- codevs 1250 Fibonacci数列(矩阵快速幂)
- 矩阵快速幂 求Fibonacci数列poj3070
- Codevs_P1250 Fibonacci数列(矩阵快速幂)
- 矩阵快速幂求Fibonacci数列
- 【数论】矩阵快速幂求Fibonacci数列
- 矩阵快速幂入门 + 求Fibonacci数列
- 矩阵快速幂 CodeVS 1250 Fibonacci数列
- 《大话设计模式》Python版代码实现
- 搬家一次
- [Setting]给VS2008扩展BCGControlBar库
- Linux netstat 命令
- Android View.post(Runnable )
- 【codevs1732】Fibonacci数列 2(矩阵快速幂)
- Learn Some Framework-1
- Java 访问 MongoDB (使用Spring-Data-MongoDB)
- 非静态内部类知识点
- 三自由度机械手工作空间的设计(MATLAB)
- Androidx学习笔记(63)---电话录(窃)音(听)机(器)
- c++习题——1
- POJ - 3481 Double Queue
- PHP实现模拟登录