矩阵快速幂
来源:互联网 发布:地面铺什么最环保 知乎 编辑:程序博客网 时间:2024/06/03 19:39
传送门:传送门
题目描述
一个数列数列f(0)=0,f(1)=1,f(2)=1,f(3)=2,f(4)=3,f(5)=5......
输入
输入整数t,表示t组测试数据
接下来t行,每行输入n(0<n<1000000000000)
接下来t行,每行输入n(0<n<1000000000000)
输出
对于每个n输出f(n)%1000007
样例输入:
2
1
3
输出
1
2
对于矩阵乘法与递推式之间的关系:
如:在斐波那契数列之中
f[i] = 1*f[i-1]+1*f[i-2] f[i-1] = 1*f[i-1] + 0*f[i-2];
即
所以
由于f[1]=1,f[0]=0,f[n]=的n次方 右上角位置的数字。记住这一结论即可。
矩阵快速幂就是普通快速幂重定义乘号即可#include<bits/stdc++.h>using namespace std;typedef long long LL;const LL MOD=1000007;struct mat{ LL a[2][2];};mat mat_mul(mat x,mat y){ mat res; memset(res.a,0,sizeof(res.a)); for(LL i=0; i<2; i++) for(LL j=0; j<2; j++) for(LL k=0; k<2; k++) res.a[i][j]=(res.a[i][j]+x.a[i][k]*y.a[k][j])%MOD; return res;}void mat_pow(LL n){ mat c,res; c.a[0][0]=c.a[0][1]=c.a[1][0]=1; c.a[1][1]=0; memset(res.a,0,sizeof(res.a)); for(LL i=0; i<2; i++) res.a[i][i]=1; while(n) { if(n&1) res=mat_mul(res,c); c=mat_mul(c,c); n=n>>1; } printf("%lld\n",res.a[0][1]%MOD);}int main(){ LL t; LL n; cin>>t; while(t--) { scanf("%lld",&n); mat_pow(n); } return 0;}
阅读全文
0 0
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- poj3070--矩阵 快速幂
- POJ3233矩阵快速幂
- poj3070Fibonacci 矩阵快速幂
- 矩阵的快速幂
- 矩阵快速幂
- 矩阵的快速幂
- Unity中针对Android Apk的签名验证(C#实现),防止二次打包
- hexo+GitHub创建属于自己的博客
- Python游戏编程入门第一章
- MySQL两种引擎的区别
- [JZOJ5373]信仰是为了虚无之人
- 矩阵快速幂
- 基于YUV图像的色彩调节
- 切换导航标签实现当前标签颜色改变以及利用js如何准确获取当前页面url网址信息
- 十进制转换为其它进制
- Batch Normalization
- 使用微信JS_JDK实现自定义分享功能
- DBCP:常见的数据库连接池(数据源)
- 关闭smartview 版本更新提示
- composer常见错误处理方案