P1349 广义斐波那契数列
2017-08-16 16:58
357 查看
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|
套路跟前面的题一样,根据递推矩阵初始化就行了
类似于之前的斐波那契数列,不过这次是广义的。
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 long using 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); }
相关文章推荐
- P1349 广义斐波那契数列
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
- P1349 广义斐波那契数列
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
- 【洛谷1349】广义斐波那契数列
- 【u021】广义斐波那契数列
- 洛谷1349 广义斐波那契数列 【矩阵乘法】
- HDU 5451 广义斐波那契数列
- 【矩阵乘法】广义斐波那契数列
- 洛谷1349 广义斐波那契数列 【矩阵乘法】
- 1574 广义斐波那契数列
- Luogu P1349 广义斐波那契数列
- 【洛谷1349】广义斐波那契数列
- 斐波那契数列,e常数,pi/4学习笔记
- 算法实例:斐波那契(Fibonacce)数列
- Java(4):基础算法(1)--斐波那契数列之小兔子生孩子
- 斐波那契数列 logn
- 斐波那契数列
- 7-9 斐波那契(Fibonacci)数列前20项(10 分)
- c 实现斐波那契(fibonacii)数列