唉。。。矩阵的逆搞了好几天都搞不明白,好不容易搞明白点了,poj1166那题wa了,虽然知道是模的地方有问题,但是不会改啊。。还得去看别人的解题报告啊。。
没办法 看下一道题了,安慰一下我受伤的心灵。。
poj 3070 水题
矩阵快速幂
初次接触矩阵的童鞋 最好仔细研究一下矩阵相乘的过程 模拟一下结果。。。到时候能够自己构造矩阵,矩阵是一个很好的工具。
(一个菜鸟在装b)
# include <stdio.h>
struct matrix
{
int m[2][2];
};
matrix mul(matrix a,matrix b)
{
int i,j,k;
matrix c;
for(i=0; i<2; i++){
for(j=0; j<2; j++){
c.m[i][j]=0;
for(k=0; k<2; k++){
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%10000;
}
}
}
return c;
}
matrix pow(int n)
{
matrix a;
a.m[0][0]=1; a.m[0][1]=1;
a.m[1][0]=1; a.m[1][1]=0;
matrix b;
b.m[0][0]=1; b.m[0][1]=0;
b.m[1][0]=0; b.m[1][1]=1;
while(n)
{
if(n&1) b=mul(a,b);
a=mul(a,a);
n>>=1;
}
return b;
}
int main ()
{
int n;
while(scanf("%d",&n)==1)
{
if(n==-1) break;
if(n==0) {
printf("0\n");
continue;
}
matrix b=pow(n-1);
printf("%d\n",b.m[0][0]);
}
}