HDU 5015-233 Matrix-矩阵快速幂

http://acm.hdu.edu.cn/showproblem.php?pid=5015


根据题意 构造一个 (n+2)*1的原矩阵   【a1 a2 a3.....233  3】

和一个 n+2  * n+2 的系数矩阵

【1 1 1 1 0   0】

【0 1 1 1 0   0】

【0 0 1 1 0   0】

【1 1 1 1 10 0】

【0 0 0 0 1   1】

使得原矩阵每次乘以系数矩阵都会得到 i+1列的数据


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


using namespace std;
struct Matrix
{
    long long mat[15][15];
} ;
int n,m;
const long long mod=10000007;
Matrix unit_matrix, c,xi;
Matrix mul(Matrix a, Matrix b) //矩阵相乘
{
    Matrix res;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
        {
            res.mat[i][j] = 0;
            for(int t = 0; t < n; t++)
            {
                res.mat[i][j] += a.mat[i][t] * b.mat[t][j];
                res.mat[i][j] %= mod;
            }
          //  printf("%d ",res.mat[0][0]);
        }

    return res;
}
Matrix pow_matrix(Matrix a, int m)  //矩阵快速幂
{
    Matrix res = unit_matrix;
    while(m != 0)
    {
        if(m & 1)
            res = mul(res, a);
        a = mul(a, a);
        m >>= 1;
    }
    return res;
}

int  main()
{


    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for (int i=0; i


你可能感兴趣的:(矩阵快速幂)