P1349 广义斐波那契数列
来源:互联网 发布:淘宝助理设置运费模板 编辑:程序博客网 时间:2024/06/08 14:30
QAQ
类似于之前的斐波那契数列,不过这次是广义的。
F(n)=p*F(n-1)+q* F(n-2)
但是数据量太大,还是使用矩阵加速,看一下这次的递推矩阵
|F(n),F(n-1)|=|F(n-1),F(n-2)|*|p,1|
|q,0|
套路跟前面的题一样,根据递推矩阵初始化就行了
#include <cstdio>#include <iostream>#define ll long longusing namespace std;ll ans[2][3];ll x[3][3];ll c[3][3];ll m;void ans_cf(){ for(int i=1;i<=1;i++) for(int j=1;j<=2;j++) c[i][j]=ans[i][j],ans[i][j]=0; for(int i=1;i<=1;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) ans[i][j]=(ans[i][j]+(c[i][k]*x[k][j])%m)%m;}void x_cf(){ for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) c[i][j]=x[i][j],x[i][j]=0; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) x[i][j]=(x[i][j]+(c[i][k]*c[k][j])%m)%m; }void fast_pow(int k){ while(k) { if(k%2) ans_cf(); x_cf(); k/=2; }}int main(){ ll p,q,a1,a2,n; scanf("%lld%lld%lld%lld%lld%lld",&p,&q,&a1,&a2,&n,&m); if(n==1) { printf("%lld",a1%m); return 0; } if(n==2) { printf("%lld",a2%m); return 0; } x[1][1]=p,x[1][2]=1,x[2][1]=q; ans[1][1]=a2,ans[1][2]=a1; n-=2; fast_pow(n); printf("%lld",ans[1][1]%m);}
阅读全文
1 0
- P1349 广义斐波那契数列
- P1349 广义斐波那契数列
- [P1349]广义斐波那契数列
- P1349 广义斐波那契数列(矩阵的应用)
- 【u021】广义斐波那契数列
- 洛谷1349 广义斐波那契数列 【矩阵乘法】
- Codevs 1574 广义斐波那契数列(矩阵乘法)
- 【矩阵乘法】广义斐波那契数列
- 【洛谷1349】广义斐波那契数列
- 1005 Number Sequence(广义斐波那契数列)
- 斐波那契数列数列计算
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- PID算法的C语言实现-20170816
- ieda 怎么解决引入版本过多导致的no class found(因为它蒙圈了)
- 如何使用特定显卡跑tensorflow
- 欢迎使用CSDN-markdown编辑器
- 解决Git Http方式 push pull 重复输入用户名和密码问题
- P1349 广义斐波那契数列
- shiro错误 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
- =和==的陷阱,我的坑
- mybatis 笔记1 为什么需要mybatis
- 递归小例子
- android dialog用法总结
- UPC 2017 Summer Training 5
- sql 递归查询分类树列表with as
- 链表的基本操作