Pagini recente » Cod sursa (job #792378) | Cod sursa (job #1726756) | Cod sursa (job #2095887) | Cod sursa (job #2069123) | Cod sursa (job #2443466)
#include <fstream>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
const int MOD = 666013;
struct matrice
{
long long m[3][3];
void clearr()
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
m[i][j] = 0;
}
}
}
matrice operator * (matrice const a)
const
{
matrice rez;
rez.clearr();
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
rez.m[i][j] = 0;
for(int k = 0; k < 3; k++)
{
rez.m[i][j] += m[i][k] * a.m[k][j];
rez.m[i][j] %= MOD;
}
}
}
return rez;
}
};
matrice exp(matrice n,int p)
{
matrice rest;
int i,j;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
{
rest.m[i][j] = n.m[i][j];
}
while(p)
{
if(p % 2)
{
rest = rest * n;
}
n = n * n;
p >>= 1;
}
/*
}*/
return rest;
}
int main()
{
int q,i,j;
cin >> q;
while(q--)
{
long long x,y,z,a,b,c,n;
cin >> x >> y >> z >> a >> b >> c >> n;
matrice init;
init.m[0][1] = b;
init.m[0][0] = a;
init.m[0][2] = c;
init.m[1][0] = init.m[2][1] = 1;
init.m[1][1] = init.m[1][2] = init.m[2][0] = init.m[2][2] = 0;
cout << (exp(init,n - 3).m[0][0] * z + exp(init,n - 3).m[0][1] * y + exp(init,n - 3).m[0][2] * x) % MOD << "\n";
}
return 0;
}