hdu 2855 Fibonacci Check-up 矩阵+斐波那契通项公式
2013-08-22 18:34
309 查看
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> #include <iostream> using namespace std; #define LL __int64 int mod; struct matrix{ int f[2][2]; }; matrix mul(matrix a,matrix b) { matrix c; int i,j,k; memset(c.f,0,sizeof(c.f)); for(k=0;k<2;k++) { for(i=0;i<2;i++) { if(!a.f[i][k])continue; for(j=0;j<2;j++) { if(!b.f[k][j])continue; c.f[i][j]=(c.f[i][j]+a.f[i][k]*b.f[k][j])%mod; } } } return c; } matrix pow_mod(matrix a,int b) { matrix s; memset(s.f,0,sizeof(s.f)); for(int i=0;i<2;i++) s.f[i][i]=1; while(b) { if(b&1) s=mul(s,a); a=mul(a,a); b=b>>1; } return s; } int main() { int T; cin>>T; while(T--) { int n; cin>>n>>mod; if(n==0){cout<<0<<endl;continue;} n=n*2; matrix e; e.f[0][0]=e.f[0][1]=e.f[1][0]=1;e.f[1][1]=0; e=pow_mod(e,n); cout<<e.f[0][1]<<endl; } return 0; } /* 矩阵: 斐波那契数列 f =f[n-1]+f[n-2]; |f[n+1] f |=|f f[n-1]|*|1 1| |1 0| 方法: 通项公式:f =(1/sqrt(5))*(((1+sqrt(5))/2)^n-((1-sqrt(5))/2)^n) 二项式:(1+a)^n=∑(C(n,k)*a^k)(0<=k<=n) ∑C(n,k)*f[k] =(1/sqrt(5))*∑C(n,k)*(((1+sqrt(5))/2)^k-((1-sqrt(5))/2)^k) =(1/sqrt(5))*(∑C(n,k)*((1+sqrt(5))/2)^k-∑C(n,k)*((1-sqrt(5))/2)^k) =(1/sqrt(5))*((3+sqrt(5))/2)^n-((3-sqrt(5))/2)^n) =(1/sqrt(5))*((1+sqrt(5))/2)^(2*n)-((1-sqrt(5))/2)^(2*n)) =f[2*n] 还可化开下。 又g =∑C(n,k)*f[k]; g =[2*n]=f[2*n-1]+f[2*n-2]=2*f[2*n-2]+f[2*n-3]=3*f[2*n-2]-f[2*n-2]+f[2*n-3] =3*f[2*n-2]-f[2*n-4]=3*g[n-1]-g[n-2]; 矩阵: |g[n+1] g |=|g g[n-1]|*| 3 1|(g[0]=0,g[1]=3) |-1 0| 结果:0 1 3 8 21 55...如果你思维够活跃,也可以直接看出来g =3*g[n-1]-g[n-2]的吧。。 */
Fibonacci Check-up
相关文章推荐
- hdu 2855 Fibonacci Check-up(矩阵乘法)
- 【HDU 2855】 Fibonacci Check-up (矩阵乘法)
- HDU - 2855 Fibonacci Check-up 斐波那契矩阵
- HDU - 2855 Fibonacci Check-up 矩阵快速幂
- HDU 2855 Fibonacci Check-up 矩阵
- hdu 2855 Fibonacci Check-up (矩阵)
- HDU2855 Fibonacci Check-up 矩阵的应用
- hdu 2855 Fibonacci Check-up
- hdu 2855 Fibonacci Check-up
- HDU 2855:Fibonacci Check-up_斐波拉契问题
- HDOJ 题目2855 Fibonacci Check-up(矩阵快速幂)
- hdu 2855 Fibonacci Check-up【递推+矩阵快速幂】
- HDU - 2855 Fibonacci Check-up
- hdu 2855 Fibonacci Check-up
- hdu 2855 Fibonacci Check-up(犀利的推导公式)
- HDU 2855 Fibonacci Check-up 构造矩阵
- hdoj 2855 Fibonacci Check-up 【打表找规律 + 矩阵快速幂】
- hdu-2855 Fibonacci Check-up
- HDU(2855_矩阵的二分快速幂)
- HDU2855 Fibonacci Check-up 矩阵的应用