#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<cstring>
#define ll long long
using namespace std;
ll M;
const int maxn = 100;
struct Matrix {
int arr[maxn][maxn];
Matrix operator*(const Matrix &m)const {
Matrix temp;
int i, j, k;
memset(temp.arr, 0, sizeof(temp.arr));
for (i = 0; i<maxn; i++)
for (k = 0; k < maxn; k++)
{
for (j = 0; j < maxn; j++)
temp.arr[i][j] = (temp.arr[i][j]+arr[i][k] * m.arr[k][j]) % M;
temp.arr[i][j] = temp.arr[i][j]%M;
}
return temp;
}
};
Matrix pow(Matrix &m, int n)
{
Matrix anc;
for (int i = 0; i < maxn; i++)
for (int j = 0; j < maxn; j++)
{
if (i == j) anc.arr[i][j] = 1;
else anc.arr[i][j] = 0;
}
while (n)
{
if (n & 1)
anc = anc*m;
m = m*m;
n >>= 1;
}
return anc;
}
快速幂模板
最新推荐文章于 2022-08-27 21:03:02 发布