HDU - 2256 矩阵快速幂 带根号的递推

Posted The Azure Arbitrator

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU - 2256 矩阵快速幂 带根号的递推相关的知识,希望对你有一定的参考价值。

题意:求$ [(\sqrt{2}+\sqrt{3})^{2n}] mod 1024 $
分析: 把指数的2带入 原式等于 $ [(5+2\sqrt{6})^n] $
有一个重要的结论是n次运算后其结果最终形式也是$ a_n+b_n\sqrt{6} $ 的形式
记最终的解$ F(n) = a_n+b_n\sqrt{6} $
$ F(n-1) = a_{n-1}+b_{n-1}\sqrt{6} $
$\frac{F(n)}{F(n-1)} = 5+2\sqrt{6} $
$ F(n) = (5+2\sqrt{6})F(n-1) $
$ F(n) = (5+2\sqrt{6})a_{n-1}+(5\sqrt{6}+12)b_{n-1} $
$ F(n) = a_n+b_n\sqrt{6} $
$ a_n = (5+2\sqrt{6})a_{n-1} $, $ b_n\sqrt{6} = (5\sqrt{6}+12)b_{n-1} $
$ a_n+b_n\sqrt{6} = (5a_{n-1}+12b_{n-1})+(2a_{n-1}+5b_{n-1})\sqrt{6} $

inline ll mod(ll a){return a%MOD;}
struct Matrix{
    ll mt[22][22],r,c;
    void init(int rr,int cc,bool flag=0){
        r=rr;c=cc;
        memset(mt,0,sizeof mt);
        if(flag) rep(i,1,r) mt[i][i]=1;
    }
    Matrix operator * (const Matrix &rhs)const{
        Matrix ans; ans.init(r,rhs.c);
        rep(i,1,r){
            rep(j,1,rhs.c){
                int t=max(r,rhs.c);
                rep(k,1,t){
                    ans.mt[i][j]+=mod(mt[i][k]*rhs.mt[k][j]);
                    ans.mt[i][j]=mod(ans.mt[i][j]);
                }
            }
        }
        return ans;
    }
};
Matrix fpw(Matrix A,int n){
    Matrix ans;ans.init(A.r,A.c,1);
    while(n){
        if(n&1) ans=ans*A;
        n>>=1;
        A=A*A;
    }
    return ans;
}

int bas[3][3]={
    {0,0,0},
    {0,5,12},
    {0,2,5},
};
int bas2[]={0,5,2}; 
int main(){
    Matrix A;A.init(2,2);
    rep(i,1,2) rep(j,1,2) A.mt[i][j]=bas[i][j];
    Matrix b; b.init(2,1);
    rep(i,1,2) b.mt[i][1]=bas2[i];
    int T=read();
    while(T--){
        int n=read();
        Matrix res=fpw(A,n-1); res=res*b;
        ll ans=mod(2*res.mt[1][1]-1+MOD);
        println(ans);
    }
    return 0;
}

以上是关于HDU - 2256 矩阵快速幂 带根号的递推的主要内容,如果未能解决你的问题,请参考以下文章

hdu-2256 Problem of Precision---矩阵快速幂+数学技巧

HDU2256&&HDU4565:给一个式子的求第n项的矩阵快速幂

HDU 2256 Problem of Precision 数论矩阵快速幂

一道简单的递推题(快速幂+矩阵乘法优化+滚动数组)

HDU 2256 Problem of Precision(矩阵快速幂)

HDU 5667 Sequence 矩阵快速幂+费马小定理