Pagini recente » Cod sursa (job #2377840) | Cod sursa (job #482814) | Cod sursa (job #2040046) | Cod sursa (job #297769) | Cod sursa (job #1743)
Cod sursa(job #1743)
#include <stdio.h>
#include <string.h>
#define M 666013
int N, X, Y, Z, A, B, C;
long long rez[4][4], power[4][4];
int nrb = 0;
FILE *fout;
void Mul(long long A[4][4], long long B[4][4], long long C[4][4])
{
long long a[4][4];
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
{
long long s = 0;
for (int k = 1; k <= 3; k++)
{
s += (B[i][k] * C[k][j]) % M;
s %= M;
}
a[i][j] = s % M;
}
memcpy(A, a, sizeof(a));
}
int main()
{
FILE *fin = fopen("iepuri.in", "rt");
fout = fopen("iepuri.out", "wt");
int T = 0;
fscanf(fin, "%d", &T);
while (T)
{
T--;
nrb = 0;
fscanf(fin, "%d %d %d %d %d %d %d", &X, &Y, &Z, &A, &B, &C, &N);
power[1][2] = power[2][3] = 1; power[1][1] = power[1][3] = power[2][1] = power[2][2] = 0;
power[3][1] = C; power[3][2] = B; power[3][3] = A;
for (int bit = 0; bit < 32; bit++)
{
if (N & (1 << bit))
{
if (nrb == 0)
memcpy(rez, power, sizeof(power)), nrb++;
else
{
Mul(rez, rez, power);
nrb++;
}
}
Mul(power, power, power);
}
int In = ((rez[1][1]% M) * X + (rez[1][2] % M) * Y + (rez[1][3] % M) * Z)% M;
fprintf(fout, "%d\n", In);
}
fclose(fin);
fclose(fin);
return 0;
}