Pagini recente » Cod sursa (job #1814974) | Cod sursa (job #229880) | Cod sursa (job #358673) | Cod sursa (job #972441) | Cod sursa (job #2258440)
#include <iostream>
#include <fstream>
#include <vector>
#define REP(i,n) for(int i=1;i<=n;++i)
using namespace std;
typedef long long ll;
typedef vector<vector<ll> > matrix;
const ll Nmax=10LL;
const ll prim=666013LL;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
ll N,A,B,C,X1,X2,X3;
ll F[Nmax];
ll nrt;
matrix T(Nmax,vector<ll>(Nmax));
matrix Prod(matrix A,matrix B)
{
matrix C(Nmax,vector<ll>(Nmax));
REP(i,3)REP(j,3)REP(k,3)
C[i][j]=(C[i][j]+A[i][k]*B[k][j])%prim;
return C;
}
matrix lgput(matrix A,ll E)
{
matrix sol(Nmax,vector<ll>(Nmax));
REP(i,3)sol[i][i]=1;
while(E)
{
if(E&1)sol=Prod(sol,A);
A=Prod(A,A);
E/=2;
}
return sol;
}
int main()
{
in>>nrt;
while(nrt--)
{
in>>X1>>X2>>X3>>A>>B>>C>>N;
T[1][1]=0; T[1][2]=1; T[1][3]=0;
T[2][1]=0; T[2][2]=0; T[2][3]=1;
T[3][1]=C; T[3][2]=B; T[3][3]=A;
F[1]=X1;
F[2]=X2;
F[3]=X3;
ll sol=0;
T=lgput(T,N-2);
REP(i,3)sol+=T[3][i]*F[i];
sol%=prim;
out<<sol<<'\n';
}
return 0;
}