标签:
/* 裸地矩阵乘法 矩阵很好想的 1 1 0 0 0 1 1 0 0 */ #include<iostream> #include<cstring> #include<cstdio> #define mod 1000000007 #define ll long long using namespace std; int T,n; ll f[4][4],a[4][4]; void mul(ll a[4][4],ll b[4][4]) { ll c[4][4]; memset(c,0,sizeof(c)); for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) c[i][j]=(c[i][j]+a[i][k]*b[k][j])%mod; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) a[i][j]=c[i][j]; } int main() { scanf("%d",&T); while(T--) { memset(f,0,sizeof(f)); memset(a,0,sizeof(a)); a[1][1]=1;a[1][2]=1;a[2][3]=1;a[3][1]=1;f[1][1]=1;f[1][2]=1; scanf("%d",&n); if(n<=3) { printf("1\n"); continue; } n-=2; while(n) { if(n&1)mul(f,a); mul(a,a); n>>=1; } printf("%ld\n",f[1][1]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/yanlifneg/p/5554271.html