• 矩阵快速幂模板


    struct Martix
    {
        ll mp[5][5];
        ll r,c;
    };
    Martix mul(Martix a,Martix b)
    {
        Martix c;
        c.r=a.r;
        c.c=b.c;
        for(int i=0;i<a.r;i++)
        {
            for(int j=0;j<b.c;j++)
            {
                c.mp[i][j]=0;
                for(int k=0;k<a.c;k++)
                {
                    c.mp[i][j]=(a.mp[i][k]*b.mp[k][j]+c.mp[i][j]+mod)%mod;
                    c.mp[i][j]%=mod;
                }
            }
        }
        return c;
    }
    Martix ans;
    Martix a;// 系数矩阵
    void init()
    {
        memset(ans.mp,0,sizeof(ans.mp));
        ans.r=2;
        ans.c=1;
        ans.mp[0][0]=36;
        ans.mp[1][0]=11;
        ans.mp[2][0]=5;
        ans.mp[3][0]=1;
    
        a.r=a.c=4;
        memset(a.mp,0,sizeof(a.mp));
        a.mp[0][0]=1;
        a.mp[0][1]=5;
        a.mp[0][2]=1;
        a.mp[0][3]=-1;
        a.mp[1][0]=a.mp[2][1]=a.mp[3][2]=1;
    }
    Martix pow(Martix x,ll k)
    {
        Martix temp;
        temp.r=temp.c=x.r;
        memset(temp.mp,0,sizeof(temp.mp));
        for(int i=0;i<x.r;i++) // 单位矩阵 
        {
            for(int j=0;j<x.c;j++) if(i==j) temp.mp[i][j]=1;
        }
        while(k)
        {
            if(k&1) temp=mul(x,temp);
            k/=2;
            x=mul(x,x);
        }
        return temp;
    }
    int main()
    {
         a=pow(a,n-4);//  系数矩阵先快速幂乘一下
         ans=mul(a,ans);// 最后和初始矩阵乘一下
         return 0;
    }
  • 相关阅读:
    10
    9
    8
    第七章
    第五章
    第六章
    android深度探索第四章
    android深度探索第三章
    android深度探索第二章
    android深度探索第一章
  • 原文地址:https://www.cnblogs.com/z1141000271/p/7753250.html
Copyright © 2020-2023  润新知