Pagini recente » Cod sursa (job #1863506) | Cod sursa (job #2613726) | Cod sursa (job #3162700) | Cod sursa (job #48310) | Cod sursa (job #1740679)
// t0 = x; t1 = y; t2 = z;
// tn = a*tn-1+b*tn-2+c*tn-3
// relatie de recurenta (exponentiere de metrice)
#include <fstream>
#define MOD 666013
using namespace std;
long long t, n;
long long a[3][3], r[3][3], aux[3][3], X, Y, Z, A, B, C, N;
void inmultire(long long a[3][3], long long b[3][3], long long c[3][3]) {
for (int i=0;i<=2;i++)
for (int j=0; j<=2; j++) {
c[i][j] = 0;
for (int k=0;k<=2; k++) {
c[i][j] += a[i][k]*b[k][j];
c[i][j] %= MOD;
}
}
}
void copiere(long long a[3][3], long long b[3][3]) {
for (int i=0;i<=2;i++)
for (int j=0; j<=2; j++)
a[i][j] = b[i][j];
}
void setid(long long a[3][3]) {
for (int i=0;i<=2;i++)
for (int j=0; j<=2; j++)
if (i == j)
a[i][j] = 1;
else
a[i][j] = 0;
}
void setinit(long long x[3][3], long long a, long long b, long long c) {
x[0][0] = a; x[0][1] = b; x[0][2] = c;
x[1][0] = 1; x[1][1] = 0; x[1][2] = 0;
x[2][0] = 0; x[2][1] = 1; x[2][2] = 0;
}
int main() {
ifstream fin ("iepuri.in");
ofstream fout("iepuri.out");
for (fin>>t;t--;) {
fin>>X>>Y>>Z>>A>>B>>C>>N;
setid(r);
setinit(a, A, B, C);
int b = N-2;
while (b) {
if (b%2 == 1) {
inmultire(r, a, aux);
copiere(r, aux);
}
inmultire(a, a, aux);
copiere(a, aux);
b/=2;
}
fout<<(r[0][0]*Z + r[0][1]*Y + r[0][2]*X) % MOD<<"\n";
}
return 0;
}