要求矩阵A的k次幂,矩阵快速幂加上二分求和
其中,矩阵相乘二分:A^2k=A^k*A^k,
A^(2k+1)=A^k*A^k*A.
求和二分:A+A^2+A...+A^(2k+1)= A+A^2+...+A^k+A^(k+1)+A^(k+1)*(A+A^2+...+A^k).
A+A^2+...+A^2k = A+A^2+...+A^k+A^k*(A+A^2+...+A^k).
#include#include #include #include using namespace std;int N,k,m;struct matrix{ int a[35][35];}origin,res;matrix multiply(matrix x,matrix y){ matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i >=1; origin=multiply(origin,origin); } } return multiply(res,origin);}*/matrix calc(int exp){ matrix p,q; p=origin; q=res; while (exp!=1) { if (exp&1) { exp--; q=multiply(p,q); } else { exp>>=1; p=multiply(p,p); } } return multiply(p,q);}matrix add(matrix x,matrix y){ matrix tmp; int i,j; for(i=0;i