矩阵快速幂&快速幂

矩阵快速幂&快速幂

一、快速幂

typedef long long ll;
ll quic_power(ll x,ll n,ll mod)
{
    ll result=1;
    while(n)
    {
        if(n&1)
        {
            result*=x;
            result%=mod;
        }
        x*=x;
        x%=mod;
        n>>=1;
    }
    return result;
}

二、矩阵快速幂

typedef long long ll;
const ll mod=998244353;
struct matrix{
    ll x[3][3];
};
matrix multi(matrix a,matrix b)//矩阵相乘
{
    matrix temp;
    memset(temp.x,0,sizeof(temp.x));
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
            {
                temp.x[i][j]+=a.x[i][k]*b.x[k][j];
                temp.x[i][j]%=mod;//负数取模的问题,除法取模
            }
    return temp;
}
matrix quick_multi(matrix a,ll n)//矩阵快速幂
{
    matrix temp=a;
    n--;
    while(n){
        if(n&1)
            temp=multi(temp,a);
        a=multi(a,a);
        n>>=1;
    }
    return temp;
}

猜你喜欢

转载自blog.csdn.net/miranda_ymz/article/details/81074805