数论基础:矩阵快速幂解斐波那契数列Yet another Number Sequence(UVA)
来源:互联网 发布:淘宝把买家加入黑名单 编辑:程序博客网 时间:2024/05/19 16:07
题意:就是求某斐波那契数列的第n个数值,同时要进行取余运算,避免爆数据。
value of n ranges in [0, 1000000000] value of m ranges in [1, 4]
input
40 1 11 30 1 42 40 1 22 40 1 21 4
output
8942967711946
矩阵快速幂的原理
详情点链接这里介绍比较全,我主要讲一下这题的我踩的坑
这里的
1.res.v[i][j]%=mod;//这里的mod必须是题目中m决定的!!!
不是1e9+7!!!!
2.if(n==0)printf("%lld\n",b);
3.a.v[0][0]=1;a.v[1][0]=1;a.v[0][1]=1;a.v[1][1]=0;
fn=ans.v[0][0]*f1+ans.v[0][1]*f0
矩阵快速幂模板:
struct matrix{ ll v[2][2]; matrix(){ memset(v,0,sizeof(v)); } matrix operator *(matrix &t){ matrix res; memset(res.v,0,sizeof(res.v)); for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++){ res.v[i][j]+=(v[i][k]%mod*t.v[k][j]%mod)%mod; res.v[i][j]%=mod; } return res; }};matrix power(matrix a,int b){ matrix ans; memset(ans.v,0,sizeof(ans.v)); ans.v[0][0]=1; ans.v[1][1]=1; while(b>0){ if(b&1)ans=ans*a; b=b>>1; a=a*a; } return ans;}
矩阵快速幂引用
matrix ans,a; for(int i=1;i<=t;i++){ scanf("%lld %lld %d %d",&b,&c,&n,&m); if(n==0)printf("%lld\n",b); else{ a.v[0][0]=1;a.v[0][1]=1; a.v[1][0]=1;a.v[1][1]=0; mod=1; while(m--)mod*=10; //题意的mod,包括用于矩阵的*操作 ans=power(a,n-1); ll sum=((ans.v[0][0]*c)%mod+(ans.v[0][1]*b)%mod)%mod; printf("%lld\n",sum); } }
欢迎各位指正不足之处!顺便点个赞嘛~
阅读全文
0 0
- 数论基础:矩阵快速幂解斐波那契数列Yet another Number Sequence(UVA)
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- UVA 10689 - Yet another Number Sequence(矩阵快速幂)
- uva 10689 - Yet another Number Sequence(矩阵快速幂)
- uva 10689 Yet another Number Sequence【矩阵快速幂】
- 【矩阵快速幂】UVA 10698 G - Yet another Number Sequence
- UVA 10698 Yet another Number Sequence 矩阵快速幂
- UVA 10689 Yet another Number Sequence(Fibonacci数列)
- 7_22_G Yet another Number Sequence(矩阵快速幂)
- Yet another Number Sequence UVA
- [矩阵快速幂] CodeForces 392C Yet Another Number Sequence
- Codeforces 392-C Yet Another Number Sequence (矩阵快速幂)
- 矩阵的运算 --- 矩阵快速幂(UVA10689 - Yet another Number Sequence)
- Codeforces 392C Yet Another Number Sequence(矩阵快速幂)
- CodeForces 392 C.Yet Another Number Sequence(矩阵快速幂)
- UVa 10689 - Yet another Number Sequence
- UVA 10689 Yet another Number Sequence
- UVA 10689 Yet another Number Sequence
- 堆排序
- es6快速入门(4)--数组的扩展
- Python--小甲鱼学习笔记--第26课:字典(dict())
- 446. Arithmetic Slices II
- 查看端口是否启用
- 数论基础:矩阵快速幂解斐波那契数列Yet another Number Sequence(UVA)
- HiveServer2 获取日志
- pat甲级1064-Complete Binary Search Tree
- UI 一一 UIWebView的应用小案例
- 第一章:STM32串口ISP下载
- Visual studio + IIS环境下跨域项目,移动端可触发断点调试的WEB服务器布署
- 第六章 ALDS1_5_A:Exhaustive Search 穷举搜索
- Springboot入门之分布式事务管理
- 474. Ones and Zeroes