Pagini recente » Cod sursa (job #1672626) | Cod sursa (job #2943131) | Cod sursa (job #28135) | Cod sursa (job #37911) | Cod sursa (job #1171061)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long ** mat_mult(long **mat1, long **mat2)
{
long **mat ;
long sum =0;
mat =(long **) malloc(9* sizeof(long));
for(long i=0; i<3; i++)
mat[i] = (long *) malloc(3* sizeof(long));
for(long i=0; i<3; i++)
for(long j=0; j<3; j++){
sum = 0;
for(long k=0; k<3; k++)
sum = (sum + mat1[i][k] * mat2[k][j]) % 666013;
mat[i][j] = sum;
}
return mat;
}
long ** mat_pow(long **mat, long n)
{
long **mat_ret ;
mat_ret =(long **) malloc(9* sizeof(long));
for(long i=0; i<3; i++)
mat_ret[i] = (long *) malloc(3* sizeof(long));
if (n==1) return mat;
if (n%2 == 0){
mat_ret = mat_pow(mat, n/2);
mat_ret = mat_mult(mat_ret, mat_ret);
}
else{
mat_ret = mat_pow(mat, (n-1)/2);
mat_ret = mat_mult(mat_ret, mat_ret);
mat_ret = mat_mult(mat_ret, mat);
}
return mat_ret;
}
void print_mat(long **mat)
{
for(long i=0; i<3; i++){
for(long j=0; j<3; j++)
printf("%ld ", mat[i][j]);
printf("\n");
}
}
void init_mat(long **mat)
{
for(long i=0; i<3; i++)
for(long j=0; j<3; j++)
mat[i][j]=0;
mat[0][1] = 1;
mat[1][2] = 1;
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
long T;
long n;
long x, y, z, A, B, C, result;
long **mat, **mat_rez ;
mat =(long **) malloc(3* sizeof(long*));
mat_rez =(long **) malloc(3* sizeof(long*));
for(long i=0; i<3; i++){
mat[i] = (long *) malloc(3* sizeof(long));
mat_rez[i] = (long *) malloc(3* sizeof(long));
}
scanf("%ld", &T);
for(long i=0; i<T; i++){
scanf("%ld %ld %ld %ld %ld %ld %ld", &x, &y, &z, &A, &B, &C, &n);
init_mat(mat);
mat[2][0] = C;
mat[2][1] = B;
mat[2][2] = A;
//print_mat(mat);
//printf("\n----\n\n");
mat = mat_pow(mat, n-2);
//print_mat(mat);
result = mat[2][0]*x % 666013 + mat[2][1]*y % 666013 + mat[2][2]*z % 666013 ;
printf("%ld\n", result % 666013);
}
return 0;
}