Pagini recente » Cod sursa (job #2063719) | Cod sursa (job #2052688) | Cod sursa (job #2661733) | Cod sursa (job #2603570) | Cod sursa (job #3314160)
#include <fstream>
#include<vector>
using namespace std;
#define int long long
#define Matrix(x) vector<vector<int>>x
#define TofindMatrix vector<vector<int>>
#define MOD 666013
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
TofindMatrix Multiplicate3x3(Matrix(a),Matrix(b))
{
Matrix(c);
c.assign(3,vector<int>(3,0));
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
for(int k=0;k<3;k++)
c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD;
}
}
return c;
}
TofindMatrix FastExpo(Matrix(A),int n)
{
Matrix(p);
p.assign(3, vector<int>(3,0));
for(int i=0;i<3;i++) p[i][i] = 1;
while(n)
{
if(n%2)p=Multiplicate3x3(p,A);
A=Multiplicate3x3(A,A);
n=n/2;
}
return p;
}
signed main()
{
int testcases;
fin>>testcases;
while(testcases--)
{
int X,Y,Z,A,B,C,N;
fin>>X>>Y>>Z>>A>>B>>C>>N;
N=N-2;
Matrix(reccurenceMatrix)=
{
{A,1,0},
{B,0,1},
{C,0,0}
};
vector<int>startValues;
startValues.push_back(Z);
startValues.push_back(Y);
startValues.push_back(X);
reccurenceMatrix=FastExpo(reccurenceMatrix,N);
int solution=0;
for(int i=0; i<3; i++)
{
solution=(solution+reccurenceMatrix[i][0]*startValues[i])%MOD;
}
fout<<solution<<"\n";
}
return 0;
}