Pagini recente » Cod sursa (job #1829007) | Cod sursa (job #1159922) | Cod sursa (job #1158507) | Cod sursa (job #644917) | Cod sursa (job #919617)
Cod sursa(job #919617)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
#define ULL unsigned long long
const int M=666013;
int N,A,B,C,X,Y,Z;
ULL a[4][4],sol[4][4];
void inmultire(ULL a[4][4], ULL b[4][4])
{
ULL c[4][4];
int i,j;
for(i=1; i<=3; ++i)
for(j=1; j<=3; ++j)
c[i][j]=(a[i][1]*b[1][j]%M+a[i][2]*b[2][j]%M+a[i][3]*b[3][j]%M)%M;
for(i=1; i<=3; ++i)
for(j=1; j<=3; ++j)
a[i][j]=c[i][j];
}
void putere(int p)
{
int k;
for(k=0; (1<<k)<=p; ++k)
{
if((1<<k)&p)
inmultire(sol,a);
inmultire(a,a);
}
}
int main()
{
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int nr_set,i,j,k;
f >> nr_set;
for(k=1; k<=nr_set; ++k)
{
f >> X >> Y >> Z >> A >> B >> C >> N;
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
a[i][j]=a[j][i]=sol[i][j]=sol[j][i]=0;
a[1][1]=A;
a[1][2]=B;
a[1][3]=C;
a[2][1]=1;
a[3][2]=1;
sol[1][1]=sol[2][2]=sol[3][3]=1;
putere(N-2);
g << (sol[1][1]*Z + sol[1][2]*Y + sol[1][3]*X)%M << endl;
}
f.close();
g.close();
return 0;
}