hdu 2256 好神奇的矩阵!

  这题自己一开始硬是不会处理√6 前面的系数,直到看了别人的博客后才知道是怎么解得,不多说,先付上一张图

  推出这个关系后,就很容易了。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 typedef long long LL;
 4 const int mod= 1024;
 5 
 6 struct matrix{
 7     int a,b,c,d;
 8     matrix(int a=0, int b=0, int c=0, int d=0):a(a),b(b),c(c),d(d) {}
 9     matrix operator *(const matrix &m2){
10         return matrix((a*m2.a%mod+b*m2.c%mod)%mod, (a*m2.b%mod+b*m2.d%mod)%mod, (c*m2.a%mod+d*m2.c%mod)%mod, (c*m2.b%mod+d*m2.d%mod)%mod);
11     }
12 } M(5,12,2,5),E(1,0,0,1);
13 
14 matrix quick_mod(matrix m, int b){
15     matrix res(E);
16     while(b){
17         if(b&1)      res= res*m;
18         m= m*m;
19         b>>=1;
20     }
21     return res;
22 }
23 
24 void solve(){
25     int n;
26     scanf("%d",&n);
27     if(n==1) {    puts("9");    return ;    }
28     matrix tmp= quick_mod(M,n-1);
29     int xn= (tmp.a*5%mod+tmp.b*2%mod)%mod;
30     printf("%d\n",(2*xn-1)%mod);
31 }
32 
33 int main(){
34     int t;
35     scanf("%d",&t);
36     while(t--)    solve();
37     return 0;
38 }

 

posted @ 2014-11-29 22:33  Newdawn_ALM  阅读(193)  评论(0编辑  收藏  举报