poj 3070 快速幂 矩阵相乘
矩阵相乘模板
#include <cstdio>
#include <cstring>
# define ld __int64
struct Matrix{
ld a[2][2];
void init()
{
a[0][0]=a[1][0]=a[0][1]=1;
a[1][1]=0;
}
};
Matrix matrix_mul(Matrix a,Matrix b)
{
int i,j,k;
Matrix ans;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
ans.a[i][j]=0;
for(k=0;k<2;k++)
ans.a[i][j]+=a.a[i][k]*b.a[k][j];
ans.a[i][j]%=10000;
}
}
return ans;
}
Matrix mult(Matrix a,ld b)
{
Matrix ans;
ans.init();
while(b)
{
if(b&1)
ans=matrix_mul(ans,a);
b>>=1;
a=matrix_mul(a,a);
}
return ans;
}
int main()
{
int n ;
while(scanf("%I64d",&n),n!=-1)
{
Matrix ans,tmp;
tmp.init();
ans=mult(tmp,n);
printf("%I64d\n",ans.a[1][1]%10000);
}
return 0;
}

浙公网安备 33010602011771号