Pagini recente » Cod sursa (job #3190144) | Cod sursa (job #3154987) | Cod sursa (job #561350) | Cod sursa (job #792128) | Cod sursa (job #482166)
Cod sursa(job #482166)
#include <stdio.h>
using namespace std;
#define MOD 666013
long long M[4][4], copie_m[4][4], I[4][2];
int bin[10001];
int n, i, j, k, t;
int x, y, z, a, b, c;
int l, p, dim;
void inmultire_M (long long a[4][4], long long b[4][4])
{
long long c[4][4];
for (i=1; i<=3; ++i)
for (j=1; j<=3; ++j)
c[i][j] = 0;
for (i=1; i<=3; ++i)
for (j=1; j<=3; ++j)
for (k=1; k<=3; ++k)
c[i][k] += (a[i][j] * b[j][k]) % MOD;
for (i=1; i<=3; ++i)
for (j=1; j<=3; ++j)
a[i][j] = c[i][j];
}
void afisare (long long mat[4][4])
{
for (i=1; i<=3; ++i)
{
for (j=1; j<=3; ++j)
printf ("%d ", mat[i][j]);
printf ("\n");
}
printf ("\n");
}
void inmultire_I (long long a[4][4], long long b[4][2])
{
long long c[4][2];
for (i=1; i<=3; ++i)
c[i][1] = 0;
for (i=1; i<=3; ++i)
for (j=1; j<=3; ++j)
for (k=1; k<=1; ++k)
c[i][k] += (a[i][j] * b[j][k]) % MOD;
for (i=1; i<=3; ++i)
b[i][1] = c[i][1];
}
int main ()
{
FILE *f = fopen ("iepuri.in","r");
FILE *g = fopen ("iepuri.out","w");
fscanf (f,"%d", &t);
for (p=1; p<=t; ++p)
{
fscanf (f,"%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
copie_m[3][1] = c;
copie_m[3][2] = b;
copie_m[3][3] = a;
copie_m[1][2] = copie_m[2][3] = 1;
for (i=1; i<=3; ++i)
for (j=1; j<=3; ++j)
M[i][j] = 0;
M[1][1] = M[2][2] = M[3][3] = 1;
I[1][1] = x;
I[2][1] = y;
I[3][1] = z;
dim = 0;
while (n)
{
dim ++;
bin[dim] = n % 2;
n /= 2;
}
for (l=dim; l>=1; --l)
{
inmultire_M (M, M);
if (bin[l])
inmultire_M (M, copie_m);
}
//afisare (M);
inmultire_I (M, I);
fprintf (g, "%lld\n", I[1][1] % MOD);
}
fclose (g);
fclose (f);
return 0;
}