hust 1384 The value of F[n]
http://acm.hust.edu.cn/thx/problem.php?id=1384
#include <stdio.h>
#define MOD 9901
#define N 3
struct Matrix
{
Matrix();
Matrix(int arr[N][N]);
int row,col,a[N][N];
};
Matrix::Matrix()
{
row=col=N;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
if(i==j) a[i][j]=1;
else a[i][j]=0;
}
Matrix::Matrix(int arr[N][N])
{
row=col=N;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
a[i][j]=arr[i][j];
}
}
}
Matrix operator*(const Matrix &M1,const Matrix &M2)
{
Matrix M3;
for(int i=0;i<M1.row;i++)
{
for(int j=0;j<M2.col;j++)
{
M3.a[i][j]=0;
for(int k=0;k<M1.col;k++)
{
M3.a[i][j]=( M3.a[i][j]+M1.a[i][k]*M2.a[k][j] ) % MOD;
}
}
}
return M3;
}
Matrix solve(Matrix a,long n)
{
Matrix s;
while(n)
{
if(n&1) s=s*a;
a=a*a;
n>>=1;
}
return s;
}
int main()
{
int Q,arr[N][N]={{1,1,0},{2,0,1},{3,0,0}};
Matrix a(arr),s;
scanf("%d",&Q);
while(Q--)
{
int f0,f1,f2;
long n;
scanf("%d %d %d %ld",&f0,&f1,&f2,&n);
f0=f0%MOD;
f1=f1%MOD;
f2=f2%MOD;
s=solve(a,n-2);
printf("%d\n",(f2*s.a[0][0]+f1*s.a[1][0]+f0*s.a[2][0]) % MOD);
}
return 0;
}
浙公网安备 33010602011771号