#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long ll;
using namespace std;
const ll mod=1e9+7,N=8;
const double eps=1e-8;
struct mat{
ll m[N][N];
void init()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
m[i][j]=0;
}
}
}AA,in;
mat mul(mat A,mat B)
{
mat c;
c.init();
for(int i=0;i<6;i++)
for(int j=0;j<6;j++)
{
ll tmp=0;
for(int k=0;k<6;k++)
{
tmp+=(A.m[i][k] % mod * B.m[k][j] % mod ) % mod;
tmp%=mod;
}
c.m[i][j]=tmp;
}
return c;
}
mat qmi(mat A,ll b)
{
mat dw;
dw.init();
for(int i=0;i<6;i++) dw.m[i][i]=1;
while(b)
{
if(b & 1) dw=mul(dw,A);
A=mul(A,A);
b >>= 1;
}
return dw;
}
ll n;
int main(){
cin>>n;
if(n==0) printf("0");
else if(n==1) printf("1");
else if(n==2) printf("16");
else
{
in.init(),AA.init();
读入数组
mat res = qmi(in,n-2);
res = mul(res,AA);
cout<<res.m[0][0] % mod;
}
return 0;
}
矩阵快速幂
最新推荐文章于 2025-05-10 17:17:22 发布