矩阵快速幂(模板)

Posted 黑.白

tags:

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

适用于 row 和 col 相同的矩阵

没有 0 优化

#define mod 1000000007
#define MN 5
struct matrix
{ 
    long long ma[MN][MN]; // row 和 col 相同 
    matrix(bool f)
    {
        memset( ma, 0x0000, sizeof(ma) );
        if(f)  // 单位矩阵 
        {
            for(int i = 1; i < MN; i++)
            {
                ma[i][i] = 1;
            }
        }
    }
};
matrix matrix_mul(matrix a,  matrix b) //不用 0 优化 
{
     matrix mp =  matrix(false);
     for(int i = 1; i < MN; i++)
     {
         for(int j = 1; j < MN; j++)
         {
             for(int k = 1; k < MN; k++)
             {
                 mp.ma[i][j] += (a.ma[i][k] * b.ma[k][j] + mod) % mod; // +mod 为防止有负数 
                 mp.ma[i][j] %= mod;
             }
         }
     } 
     return mp;
}
matrix matrix_pow(matrix a, long long x)
{
    matrix mp = matrix( true );
    while( x )
    {
        if( x & 1 )
        {
            mp = matrix_mul(mp, a);
        }
        x >>= 1;
        a = matrix_mul(a, a);
    } 
    return mp;
}

 

以上是关于矩阵快速幂(模板)的主要内容,如果未能解决你的问题,请参考以下文章

poj 3070 Fibonacci (矩阵快速幂乘/模板)

从矩阵快速幂的泛型模板设计——教你如何优雅的面向对象

模板矩阵快速幂

蒟阵P3390 模板矩阵快速幂

求幂大法,矩阵快速幂,快速幂模板题--hdu4549

矩阵快速幂 模板