构造二阶矩阵即可
#include <cstdio>
const int N = 2;
const int MOD = 7;
struct mat
{
int a[N][N];
};
mat mul(mat x, mat y)
{
mat t;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
t.a[i][j] = 0;
for(int k = 0; k < N; k++)
{
t.a[i][j] += (x.a[i][k] * y.a[k][j]) % MOD;
}
}
}
return t;
}
mat pow(mat x, int n)
{
mat e;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
e.a[i][j] = 0;
}
}
for(int i = 0; i < N; i++)
{
e.a[i][i] = 1;
}
while(n)
{
if(n & 1)
{
e = mul(e, x);
}
x = mul(x, x);
n >>= 1;
}
return e;
}
int main(int argc, char const