矩阵快速幂模版

const ll mod=1000;
const int N=4;
struct node
{
    ll a[N][N];
    void init()
    {
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                a[i][j]=0;
        for(int i=0;i<N;i++)
            a[i][i]=1;
    }
    void CSH()
    {
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                a[i][j]=0;
    }
};
node add(node x,node y)
{
    node c;
    for(int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            c.a[i][j]=((x.a[i][j]+y.a[i][j])%mod);
    return c;
}
node mul(node x,node y)
{
    node c;
    c.CSH();
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            for(int k=0;k<N;k++)
                c.a[i][j]+=x.a[i][k]*y.a[k][j];
            c.a[i][j]%=mod;
        }
    }
    return c ;
}
node quick(node x,ll y)
{
    node ans;
    ans.init();
    while(y)
    {
        if(y&1) ans=mul(ans,x);
        y>>=1;
        x=mul(x,x) ;
    }
    return ans;
}
int main()
{
}

猜你喜欢

转载自blog.csdn.net/oinei/article/details/76034341