WA,帮条的dalao可不可以把改好的代码交以下再回复
#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
struct M {
int n, m;
int mat[107][107];
M() {
memset(mat, 0, sizeof(mat));
}
} bas, ori;
const int MOD = 1e9 + 7;
const int N=1e7+10;
int n, T, f[N];
M mul(M a, M b) {
M ans;
ans.n = a.n, ans.m = b.m;
for (int i = 1; i <= ans.n; i++) {
for (int j = 1; j <= ans.m; j++) {
for (int k = 1; k <= a.m; k++) {
ans.mat[i][j] = (ans.mat[i][j] + 1ll * a.mat[i][k] * b.mat[k][j]) % (MOD - 1);
}
}
}
return ans;
}
M qpow(M x, ll p) {
M ret;
ret.n = ret.m = x.n;
for (int i = 1; i <= x.n; i++) ret.mat[i][i] = 1;
while (p) {
if (p & 1) ret = mul(ret, x);
p >>= 1;
x = mul(x, x);
}
return ret;
}
int qpow_num(int a, int b) {
int ret = 1;
a %= MOD;
while (b) {
if (b & 1) ret = 1ll * ret * a % MOD;
b >>= 1;
a = 1ll * a * a % MOD;
}
return ret;
}
void low_fib() {
f[0] = f[1] = 1;
for (int i = 2;f[i]<MOD;i++) {
f[i] = f[i - 1] + f[i - 2];
}
}
int get_a(int n){
int res=n;
for(int i=1;f[i]<MOD;i++){
if(res>=f[i])res++;
else break;
}
return res;
}
void init(){
bas.n=bas.m=2;
ori.n=1,ori.m=2;
bas.mat[1][1]=bas.mat[1][2]=bas.mat[2][1]=1;
ori.mat[1][1]=ori.mat[1][2]=1;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
low_fib();
cin >> T;
while (T--) {
init();
cin >> n;
int a=get_a(n);
if(n>=2){
M ans=qpow(bas,n-1);
ans=mul(ori,ans);
int b=ans.mat[1][1];
cout<<qpow_num(a,b)%MOD<<"\n";
}else{
cout<<qpow_num(a,1)<<"\n";
}
}
return 0;
}