题意:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 3;
const int MOD = 1e9+7;
LL quickpow(LL m,LL n)
{
LL b=1;
m%=MOD;
while(n>0)
{
if(n&1)b=(b*m)%MOD;
n=n>>1;
m=(m*m)%MOD;
}return b;
}
struct Matrix
{
LL m[N][N];
};
Matrix I = {//I主对角线是1
1,0,0,
0,1,0,
0,0,1,
};
Matrix multi(Matrix a,Matrix b)//矩阵乘法
{
Matrix c;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
c.m[i][j] = 0;
for(int k=0;k<N;k++)
c.m[i][j] += a.m[i][k] * b.m[k][j] % MOD;
c.m[i][j] %= MOD;
}
}
return c;
}
Matrix power(Matrix A,LL k)//矩阵A的k次幂(快速幂)
{
Matrix ans = I,p = A;
while(k)
{
if(k&1)
{
ans = multi(ans,p);
k--;
}
k >>= 1;
p = multi(p,p);
}
return ans;
}
Matrix A = {
4,17,-12,
1,0,0,
0,1,0,
};
int main()
{
int t;
LL n,h2;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
if(n==3)
{
printf("197\n"); continue;
}
if(n==2)
{
printf("31\n"); continue;
}
Matrix ans = power(A,n-4);
h2=(((ans.m[0][0]*1255)%MOD+(ans.m[0][1]*197)%MOD)%MOD+(ans.m[0][2]*31)%MOD)%MOD;
h2=(h2+MOD)%MOD;
printf("%lld\n",h2);
}
return 0;
}