这道题考察的知识点很纯粹,就是考察矩阵快速幂的算法。这道题可以当成一道模板题来记。不多说
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct mat {
int a[2][2];
}s;
mat b,c;
mat multiply(mat x,mat y) {
int i,j,k;
mat te;
memset(te.a,0,sizeof(te.a));
for(i=0; i<2; i++)
for(j=0; j<2; j++) {
for(k=0; k<2; k++)
te.a[i][j]+=x.a[i][k]*y.a[k][j];
te.a[i][j]%=10000;
}
return te;
}
mat cal(int n) {
mat p = b,q=c;
while(n) {
if(n&1) p=multiply(p,q);
n>>=1;
q=multiply(q,q);
}
return p;
}
int main() {
int n;
s.a[0][0]=1,s.a[0][1]=1,s.a[1][0]=1,s.a[1][1]=0;
b.a[0][0]=1,b.a[0][1]=0,b.a[1][0]=0,b.a[1][1]=1;
c=s;
while(scanf("%d",&n) && n!=-1) {
mat t=cal(n);
printf("%d\n",t.a[0][1]);
}
return 0;
}