Pagini recente » Cod sursa (job #427897) | Cod sursa (job #292746) | Istoria paginii runda/runda12 | Cod sursa (job #286585) | Cod sursa (job #844714)
Cod sursa(job #844714)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
#define MOD 666013
long long M[5][5],SOL[5][5],O[5][5];
ifstream f("iepuri.in");
ofstream g("iepuri.out");
void copy(long long B[5][5],long long C[5][5])
{
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++)
B[i][j]=C[i][j];
}
void mul(long long B[5][5] , long long C[5][5])
{
long long aux2[5][5];
copy(aux2,O);
for(int l=1; l<=3;l++)
for(int c=1; c<=3; c++)
for(int i=1; i<=3; i++)
{
aux2[l][c]+=B[l][i]*C[i][c];
if(aux2[l][c] > MOD) aux2[l][c]%=MOD;
}
copy(B,aux2);
}
void Lg_Pow(long long P)
{
if(P==1)
{
copy(SOL,M);
return;
}
Lg_Pow(P/2);
if(P%2)
{
mul(SOL,SOL);
mul(SOL,M);
}
else mul(SOL,SOL);
}
int main()
{
int T;
f>>T;
while(T--)
{
int X,Y,Z,A,B,C;
long long N;
f>>X>>Y>>Z>>A>>B>>C>>N;
M[1][1]=M[1][2]=M[2][2]=M[3][1]=0;
M[2][1]=M[3][2]=1;
M[1][3]=C,M[2][3]=B,M[3][3]=A;
Lg_Pow(N-2);
int rez=(((((X*SOL[1][3])%MOD)+Y*SOL[2][3])%MOD)+Z*SOL[3][3])%MOD;
g<<rez<<"\n";
}
return 0;
}