Pagini recente » Cod sursa (job #2796401) | Cod sursa (job #1319023) | Cod sursa (job #2461236) | Cod sursa (job #1014622) | Cod sursa (job #3169810)
#include <fstream>
#include <iostream>
#include <vector>
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int T;
vector<int> I;
struct mat {
int l,c;
int v[3][3];
mat() {
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
v[i][j]=0;
}
};
mat mat_mult(mat A, mat B) {
mat C;
C.l=A.l;
C.c=B.c;
for (int i=0;i<C.l;i++)
for (int j=0;j<C.c;j++)
for (int k=0;k<A.c;k++)
C.v[i][j]=(C.v[i][j]+(A.v[i][k]*B.v[k][j])%MOD)%MOD;
return C;
}
mat mat_exp(mat M, int N) {
mat P; P.l=3; P.c=3;
P.v[0][0]=1;
P.v[1][1]=1;
P.v[2][2]=1;
while (N) {
if (N%2==1) {
P=mat_mult(P,M);
}
M=mat_mult(M,M);
N/=2;
}
return P;
}
void solve() {
int X,Y,Z,A,B,C,N;
f >> X >> Y >> Z >> A >> B >> C >> N;
I.resize(N+1);
I[0]=X;
I[1]=Y;
I[2]=Z;
mat M;
M.l=M.c=3;
M.v[0][1]=1; M.v[1][2]=1;
M.v[2][0]=C; M.v[2][1]=B; M.v[2][2]=A;
M=mat_exp(M,N-2);
g << (((X*M.v[2][0])%MOD + Y*M.v[2][1])%MOD + Z*M.v[2][2])%MOD << '\n';
}
int main()
{
f >> T;
while (T--)
solve();
return 0;
}