Question: Calculate the nth entry of the Fibonacci series
1 #include "iostream" 2 #include "vector" 3 #include "cstring" 4 using namespace std; 5 6 typedef unsigned long int ULL; 7 typedef vector<ULL> vec; 8 typedef vector<vec> mat; 9 const ULL P=10000;10 int n,m;11 12 mat mul(mat &A,mat &B) //return A*B13 {14 mat C(A.size(),vec(B[0].size()));15 for (int i=0;i<(int)A.size();i++)16 {17 for (int k=0;k<(int)B.size();k++)18 {19 for (int j=0;j<(int)B[0].size();j++)20 {21 C[i][j]=(C[i][j]+A[i][k]*B[k][j])%P;22 }23 }24 }25 return C;26 }27 28 mat m_pow(mat A,int m) //return A^m29 {30 mat B(A.size(),vec(A.size()));31 for (int i=0;i<(int)A.size();i++)32 B[i][i]=1;33 while (m>0)34 {35 if (m&1) B=mul(B,A);36 A=mul(A,A);37 m>>=1;38 }39 return B;40 }41 42 int main()43 {44 while (cin>>n)45 {46 if (n==-1) break;47 mat A(2,vec(2));48 49 A[0][0]=1; A[0][1]=1;50 A[1][0]=1; A[1][1]=0;51 52 A=m_pow(A,n);53 cout<<A[1][0]<<endl;54 }55 }
Poj 3070 Matrix Quick power Template