#include<stdio.h>
#include<string.h>
#define LL long long
#define maxn 109
const LL mod = 1e9 + 7;
const int SIZE=5;
struct matrix
{
LL mat[SIZE][SIZE];
matrix(){memset(mat,0,sizeof mat);}
matrix operator * (const matrix & x)const
{
matrix ans;
for(int i=0;i<SIZE;i++)
for (int j = 0; j < SIZE; j++)
for (int k = 0; k < SIZE; k++)
ans.mat[i][j] = (ans.mat[i][j] + mat[i][k] * x.mat[k][j]) % mod;
return ans;
}
};
matrix Pow(matrix a,int b)
{
matrix ans;
for (int i = 0; i < SIZE; i++)
ans.mat[i][i] = 1;
while (b)
{
if (b & 1)
ans = ans * a;
a = a * a;
b >>= 1;
}
return ans;
}
int main()
{
matrix a, b;
a.mat[0][0] = 1;
a.mat[0][1] = 2;
a = a * b;
a = Pow(a, 20);
printf("%lld\n", a.mat[0][0]);
return 0;
}
矩阵快速幂(模板)
最新推荐文章于 2024-07-25 17:33:54 发布