这道题目摘选自南洋理工学院acm的第148题。这道题目用矩阵快速幂就可以写出来,不需要打表。我在之前写过有关快速幂的博客,参照那个模板把乘法运算符重载一下就行了,具体实现请看代码。
#include<cstdio>
#include<iostream>
using namespace std;
struct MATRIX
{
int a,b,c,d;
}prime={1,1,1,0},I={1,0,0,1};
int mod=10000;
MATRIX operator*(MATRIX first,MATRIX second)
{
MATRIX temp;
temp.a=(first.a*second.a+first.b*second.c)%mod;
temp.b=(first.a*second.b+first.b*second.d)%mod;
temp.c=(first.c*second.a+first.d*second.c)%mod;
temp.d=(first.c*second.b+first.d*second.d)%mod;
return temp;
}
MATRIX QM(int n)
{
MATRIX result=I,remain=prime;
while(n)
{
if(n%2) result=result*remain;
remain=remain*remain;
n>>=1;
}
return result;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n!=-1)
{
printf("%d\n",QM(n).b);
}
return 0;
}