Pagini recente » Cod sursa (job #148215) | Cod sursa (job #446342) | Cod sursa (job #308589) | Cod sursa (job #690019) | Cod sursa (job #2695122)
#include <iostream>
#include <fstream>
#define Mod 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long M[4][4];
long long I3[4][4];
long long Rez[4][4];
int T,X,Y,Z,A,B,C,N;
void Solve()
{
while(N)
{
Rez[1][1]=Rez[1][2]=Rez[1][3]=Rez[2][1]=Rez[2][2]=Rez[2][3]=Rez[3][1]=Rez[3][2]=Rez[3][3]=0;
if(N%2)
{
for(int i=1; i<=3; i++) //I3=I3*M
for(int j=1; j<=3; j++)
for(int k=1; k<=3; k++)
Rez[i][j]=(Rez[i][j]+(I3[i][k]*M[k][j])%Mod)%Mod;
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++)
I3[i][j]=Rez[i][j];
}
Rez[1][1]=Rez[1][2]=Rez[1][3]=Rez[2][1]=Rez[2][2]=Rez[2][3]=Rez[3][1]=Rez[3][2]=Rez[3][3]=0;
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++) //M=M*M
for(int k=1; k<=3; k++)
Rez[i][j]=(Rez[i][j]+(M[i][k]*M[k][j])%Mod)%Mod;
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++)
M[i][j]=Rez[i][j];
N/=2;
}
}
int main()
{
f>>T;
for(int q=0; q<T; q++)
{
f>>X>>Y>>Z>>A>>B>>C>>N;
M[1][1]= M[2][2]=M[2][1]=M[1][3]=0;
M[1][2]=M[2][3]=1;
M[3][1]=C; //initializez matricele
M[3][2]=B;
M[3][3]=A;
I3[1][1]=I3[2][2]=I3[3][3]=1;
I3[1][2]=I3[1][3]=I3[2][1]=I3[2][3]=I3[3][1]=I3[3][2]=0;
N-=2;
if(N>0)
Solve();
g<<((I3[3][1]*X)%Mod+(I3[3][2]*Y)%Mod+(I3[3][3]*Z)%Mod)%Mod<<'\n';
}
return 0;
}