[HDU2855]Fibonacci Check-up

Posted hjj1871984569

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HDU2855]Fibonacci Check-up相关的知识,希望对你有一定的参考价值。

题目:Fibonacci Check-up

链接:

分析:

1)二项式展开:$(x+1)^n = sum^n_{k=0}{C^k_n * x^k}$

2)Fibonacci数列可以写为:$ left[ egin{array}{cc} 0 & 1 \ 1 & 1 end{array} ight]^n$的左下角项。

3)构造矩阵。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
int MOD;
struct Matrix{
    LL a[2][2];
    void init(int f){
        memset(a,0,sizeof a);
        if(f==-1)return;
        for(int i=0;i<2;++i)a[i][i]=1;
    }
};
Matrix operator*(Matrix& A,Matrix& B){
    Matrix C;C.init(-1);
    for(int i=0;i<2;++i)
    for(int j=0;j<2;++j)
        for(int k=0;k<2;++k){
            C.a[i][j]+=A.a[i][k]*B.a[k][j];
            C.a[i][j]%=MOD;
        }
    return C;
}
Matrix operator^(Matrix A,int n){
    Matrix Rt;Rt.init(0);
    for(;n;n>>=1){
        if(n&1)Rt=Rt*A;
        A=A*A;
    }
    return Rt;
}
int main(){
    int n,Case;scanf("%d",&Case);
    Matrix A,T;
    T.a[0][0]=1;T.a[0][1]=1;
    T.a[1][0]=1;T.a[1][1]=2;

    for(;Case--;){
        scanf("%d%d",&n,&MOD);
        A=T^n;
        LL ans=A.a[1][0];
        printf("%lld
",ans%MOD);
    }

    return 0;
}
        

 

以上是关于[HDU2855]Fibonacci Check-up的主要内容,如果未能解决你的问题,请参考以下文章

[HDU] Fibonacci Check-up

hdu 1568 Fibonacci

Fibonacci String(hdu 1708)

HDU 1021 Fibonacci Again 数学题

HDU 1021 Fibonacci Again

hdu1568 Fibonacci---前4位