首先我们可以自然地发现原式
然后联想到共轭数的性质想到,并且
那么,也就是说
因为,这样把上式取整得
(是整数部分,
是非整数部分的系数,再说下共轭数的性质还有一个
)
那么再去想如何求
我们可以设
那么
由此得
最终得到递推式
也就是
构造矩阵得,且
,
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long int ll;
const ll mod=1024;
int t;
ll n;
ll s[2][2];
void mult(ll a[][2],ll b[][2])
{
ll c[2][2]= {0,0,0,0};
for(int k=0; k<2; k++)
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
c[i][j]=(c[i][j]+a[i][k]*b[k][j]%mod)%mod;
memcpy(a,c,sizeof(c));
}
void quick(ll x)
{
ll T[2][2]= {5,12,2,5};
while(x)
{
if(x%2) mult(s,T);
mult(T,T);
x/=2;
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
s[0][0]=s[1][1]=1;
s[0][1]=s[1][0]=0;
quick(n-1);
ll A=(s[0][0]*5%mod+s[0][1]*2%mod)%mod;
printf("%lld\n",(A*2-1)%mod);
}
return 0;
}