题意:
让你用矩阵来找Fibonacci数
思路:
不用矩阵快速幂会TLE,只能学一下啦
(其实也不难)
// by SiriusRen
#include <cstdio>
using namespace std;
struct matrix{
int a[2][2];
void init(){a[0][0]=a[1][0]=a[0][1]=1;a[1][1]=0;}
};
matrix multiplication(matrix a,matrix b){
matrix c;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++){
c.a[i][j]=0;
for(int k=0;k<2;k++)
c.a[i][j]+=a.a[i][k]*b.a[k][j];
c.a[i][j]%=10000;
}
return c;
}
void pow(int x){
if(x==-1){puts("0");return;}
matrix ans,s;ans.init();s.init();
while(x>=1){
if(x&1)ans=multiplication(ans,s);
s=multiplication(s,s);
x>>=1;
}
printf("%d\n",ans.a[0][1]);
}
int main(){
int k;
while(scanf("%d",&k)&&k!=-1)pow(k-1);
}