Pagini recente » Cod sursa (job #2664858) | Cod sursa (job #510777) | Cod sursa (job #1294581) | Cod sursa (job #1722311) | Cod sursa (job #1801538)
#include <bits/stdc++.h>
#define Modulo 666013
using namespace std;
int a, b, c, n, x, y, z, ans, t;
int m[4][4], mm[4][4];
int aux[4][4];
ofstream g("iepuri.out");
inline void Solve();
inline void Read()
{
ifstream f("iepuri.in");
f >> t;
for(int i = 1; i <= t; i++)
{
f >> x >> y >> z >> a >> b >> c >> n;
Solve();
}
f.close();
}
inline void Copy(int m[4][4], int mm[4][4])
{
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
m[i][j] = mm[i][j];
}
inline void Mat_Mult(int m[4][4], int mm[4][4])
{
int mmm[4][4];
int i, j, k, s;
for(i = 1; i <= 3; i++)
for(j = 1; j <= 3; j++)
{
s = 0;
for(k = 1; k <= 3; k++)
s = (s + 1LL * m[i][k] * mm[k][j]) % Modulo;
mmm[i][j] = s;
}
Copy(m, mmm);
}
inline void Mat_Lg_Pow(int m[4][4], int p)
{
int mmm[4][4];
Copy(mmm, aux);
mmm[1][1] = mmm[2][2] = mmm[3][3] = 1;
while(p)
{
if(p % 2 == 1)
{
Mat_Mult(mmm, m);
p--;
}
Mat_Mult(m, m);
p /= 2;
}
Copy(m, mmm);
}
inline void Solve()
{
Copy(m, aux);
Copy(mm, aux);
m[1][1] = x;
m[1][2] = y;
m[1][3] = z;
if(n < 4)
ans = m[1][n];
else
{
mm[1][3] = c;
mm[2][3] = b;
mm[3][3] = a;
mm[2][1] = mm[3][2] = 1;
mm[1][2] = mm[1][1] = mm[2][2] = mm[3][1] = 0;
Mat_Lg_Pow(mm, n - 2);
Mat_Mult(m, mm);
ans = m[1][3];
}
g << ans << "\n";
}
int main()
{
Read();
g.close();
return 0;
}