Pagini recente » Istoria paginii utilizator/costinteo | Cod sursa (job #1702769) | Cod sursa (job #2193408) | Cod sursa (job #1839281) | Cod sursa (job #804446)
Cod sursa(job #804446)
#include<stdio.h>
#define MOD 666013
long long X,Y,Z,A,B,C,N,T;
long long mat[3][3];
void i0_matrix(long long a[][3])
{
int i,j;
for(i=0;i<3;++i)
for(j=0;j<3;++j)
a[i][j] = 0;
}
void i3_matrix(long long a[][3])
{
int i,j;
for(i=0;i<3;++i)
for(j=0;j<3;++j)
a[i][j] = (i==j);
}
void init_mat()
{
i0_matrix(mat);
mat[0][0] = A;//A B C
mat[0][1] = B;//1 0 0
mat[0][2] = C;//0 1 0
mat[1][0] = 1;
mat[2][1] = 1;
}
void show_matrix(long long a[][3])
{
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
}
void copy_matrix(long long a[][3], long long b[][3])
{
int i,j;
for(i=0;i<3;++i)
for(j=0;j<3;++j)
a[i][j] = b[i][j];
}
void multiply_matrix(long long a[][3], long long b[][3])
{
long long c[3][3],i,j,k;
i0_matrix(c);
for(i=0;i<3;++i)
for(j=0;j<3;++j)
for(k=0;k<3;++k)
{
c[i][j] += (a[i][k] * b[k][j])%MOD;
c[i][j] %= MOD;
}
copy_matrix(a,c);
}
void exp_mat(long long p)
{
long long sol[3][3];
i3_matrix(sol);
for(;p;p/=2)
{
if(p%2 == 1)
{
multiply_matrix(sol,mat);
}
multiply_matrix(mat,mat);
}
copy_matrix(mat,sol);
}
int get_answer()
{
return ((mat[0][0] * Z)%MOD + (mat[0][1] * Y)%MOD + (mat[0][2] * X)%MOD)%MOD;//a*z + b*y + c*x
}
int main()
{
FILE*f = fopen("iepuri.in","r");
FILE*g = fopen("iepuri.out","w");
fscanf(f,"%d",&T);
while(T--)
{
fscanf(f,"%d %d %d %d %d %d %d", &X, &Y, &Z, &A, &B, &C, &N);
init_mat();
exp_mat(N-2);
fprintf(g,"%d\n", get_answer());
}
fclose(f);
fclose(g);
return 0;
}