Pagini recente » Cod sursa (job #337672) | Cod sursa (job #2324131) | Cod sursa (job #2681254) | Cod sursa (job #3224729) | Cod sursa (job #2258142)
#include <iostream>
#include <stdio.h>
#define NMAX 1000000000
#define MOD 666013
using namespace std;
struct Matrix {
int mat[5][5] ;
};
Matrix matbaz ;
Matrix matrez ;
Matrix inmultire (Matrix m1, Matrix m2 ) {
Matrix mrez ;
for (int i = 1 ; i <= 3 ; i++ ) {
for (int j = 1 ; j <= 3 ; j++ ) {
mrez.mat[i][j] = 0 ;
for (int k = 1 ; k <= 3 ; k++ )
mrez.mat[i][j] = (mrez.mat[i][j] + ( m1.mat[i][k] * m2.mat[k][j] ) % MOD ) % MOD ;
}
}
return mrez ;
}
int main() {
FILE *fin, *fout ;
fin = fopen ("iepuri.in", "r" ) ;
fout = fopen ("iepuri.out", "w" ) ;
int n, x, y, z, t, a, b, c ;
fscanf (fin, "%d", &t ) ;
while (t > 0 ) {
fscanf (fin, "%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n ) ;
for (int i = 0 ; i <= 4 ; i++ )
for (int j = 0 ; j <= 4 ; j++ ) {
matrez.mat[i][j] = 0 ;
matbaz.mat[i][j] = 0 ;
}
matbaz.mat[1][3] = c ;
matbaz.mat[2][3] = b ;
matbaz.mat[3][3] = a ;
matbaz.mat[2][1] = matbaz.mat[3][2] = 1 ;
matrez.mat[1][1] = 1 ;
matrez.mat[2][2] = 1 ;
matrez.mat[3][3] = 1 ;
while (n > 0 ) {
if (n % 2 == 0 ) {
matbaz = inmultire (matbaz, matbaz ) ;
n /= 2 ;
}
else {
matrez = inmultire ( matbaz, matrez ) ;
n--;
}
}
for (int i = 0 ; i <= 3 ; i++ )
for (int j = 0 ; j <= 3 ; j++ )
matbaz.mat[i][j] = 0 ;
matbaz.mat[1][1] = x ;
matbaz.mat[1][2] = y ;
matbaz.mat[1][3] = z ;
matrez = inmultire(matbaz, matrez) ;
fprintf (fout, "%d\n", (matrez.mat[1][1]) % MOD ) ;
t--;
}
return 0;
}