【D - ECJTU_ACM 11级队员2012年暑假训练赛(2)】
1 // Project name : D ( Fibonacci ) 2 // File name : main.cpp 3 // Author : Izumu 4 // Date & Time : Tue Jul 10 14:02:23 2012 5 6 #include <iostream> 7 #include <stdio.h> 8 using namespace std; 9 10 11 int p[30][4]={1,1,1,0}; 12 13 void mm(int * ret,int * a,int * b) 14 { 15 int x[4],y[4],i; 16 for(i=0;i<4;i++) 17 { 18 x[i]=a[i]; 19 y[i]=b[i]; 20 } 21 ret[0] = (x[0]*y[0] + x[1]*y[2]) % 10000; 22 ret[1] = (x[0]*y[1] + x[1]*y[3]) % 10000; 23 ret[2] = (x[2]*y[0] + x[3]*y[2]) % 10000; 24 ret[3] = (x[2]*y[1] + x[3]*y[3]) % 10000; 25 } 26 27 int main() 28 { 29 int i,n; 30 int a[4]={0,1,1,0}; 31 for(i=1;i<30;i++) 32 { 33 mm(p[i],p[i-1],p[i-1]); 34 } 35 while(1) 36 { 37 scanf("%d",&n); 38 if(n==-1) break; 39 a[0]=1;a[1]=0;a[2]=0;a[3]=1; 40 41 for(i=0;i<30;i++) 42 { 43 if(n&(1<<i)) 44 { 45 mm(a,a,p[i]); 46 } 47 } 48 cout << a[1] << endl; 49 } 50 51 return 0; 52 } 53 54 55 // end 56 // ism