poj 3070 Fibonacci
#include<iostream> #include<cstdio> using namespace std; struct node { int v[2][2]; }; node mult(node ma,node mb) { int i,j,k; node ans; for(i=0;i<2;i++) for(j=0;j<2;j++) { ans.v[i][j]=0; for(k=0;k<2;k++) { ans.v[i][j]+=ma.v[i][k]*mb.v[k][j]%10000; ans.v[i][j]%=10000; } } return ans; } int main() { int n; while(scanf("%d",&n)!=EOF&&n!=-1) { node a,b; a.v[0][0]=a.v[0][1]=a.v[1][0]=1; a.v[1][1]=0; b.v[0][0]=b.v[1][1]=1; b.v[0][1]=b.v[1][0]=0; while(n) { if(n&1) b=mult(a,b); n=n>>1; a=mult(a,a); } printf("%d\n",b.v[1][0]); } return 0; }
不怕路长,只怕心老.