Pagini recente » Cod sursa (job #1209026) | Cod sursa (job #1045442) | Cod sursa (job #2050935) | Cod sursa (job #2355256) | Cod sursa (job #2108701)
#include <iostream>
#include <fstream>
using namespace std;
int T, N, X, Y, Z, a, b, c;
struct matrix
{
int m[3][3];
};
matrix mult(matrix A, matrix B)
{
matrix r;
int i, j, k;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (r.m[i][j]=0,k=0;k<3;k++)
r.m[i][j]= (r.m[i][j] + A.m[i][k]*B.m[k][j])%666013;
return r;
}
matrix exp(matrix base, int e)
{
matrix r;
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
r.m[i][j]=0;
r.m[0][0]=r.m[1][1]=r.m[2][2]=1;
if (e==0)
return r;
else if (e==1)
{
return base;
}
else
{
matrix tmp=exp(base, e/2);
r=mult(tmp, tmp);
if (e%2)
r=mult(r, base);
//for (int i=0;i<3;i++)
//{
// for (int j=0;j<3;j++)
// cout<<r.m[i][j]<<' ';
// cout<<'\n';
//}
return r;
}
}
int main()
{
ifstream f("iepuri.in");
ofstream g("iepuri.out");
f>>T;
matrix A;
int er;
while (T--)
{
f>>X>>Y>>Z>>a>>b>>c>>N;
A.m[0][0]=a;
A.m[0][1]=b;
A.m[0][2]=c;
A.m[1][0]=1;
A.m[2][1]=1;
A.m[1][1]=A.m[1][2]=0;
A.m[2][0]=A.m[2][2]=0;
A = exp(A, N-2);
er=(A.m[0][0]*Z+A.m[0][1]*Y+A.m[0][2]*X)%666013;
g<<er<<'\n';
}
}