矩阵快速幂模板

作用:计算特殊的递推式;

难点:构建矩阵递推式;


代码:

//用二维vector来表示矩阵
typedef vector<int> vec;
typedef vector<vec> mat;
typedef long long LL;

const int MOD = 1000;

//计算A*B
mat mul(mat &A,mat &B)//返回mat类型;
{
     mat C(A.size(),vec(B[0].size()));//临时二维vector,自动初始化为0,,数组形式不是全局变量要初始化memset;
     for(int i=0;i<A.size();i++)
           for(int k=0;k<B.size();k++)
                  if(A[i][k]!=0)//对于矩阵较多0;
                  for(int j=0;j<B[0].size();j++)
                         C[i][j]=(C[i][j]+A[i][k]*B[k][j])%MOD;
      return C;
}

//计算A^n
mat pow(mat A,LL n)//返回mat类型;
{
      mat B(A.size(),vec(A[0].size()));//临时二维vector;
       for(int i=0;i<A.size();i++)
               B[i][i]=1;
       while(n>0)//快速幂
       {
               if(n&1)   B=mul(B,A);
               A=mul(A,A);
               n>>=1;
        }
        return B;
}


常用一般矩阵后续更新...



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值