Pagini recente » Cod sursa (job #1454223) | Cod sursa (job #3166506) | Borderou de evaluare (job #1036239) | Cod sursa (job #2920396) | Cod sursa (job #856885)
Cod sursa(job #856885)
#include <fstream>
#include <iostream>
#define mod 666013
using namespace std;
unsigned long long *inm(unsigned long long *a, unsigned long long *b)
{
unsigned long long i, *c = new unsigned long long[9];
c[0] = (a[0]*b[0] + a[1]*b[3] + a[2]*b[6])%mod;
c[1] = (a[0]*b[1] + a[1]*b[4] + a[2]*b[7])%mod;
c[2] = (a[0]*b[2] + a[1]*b[5] + a[2]*b[8])%mod;
c[3] = (a[3]*b[0] + a[4]*b[3] + a[5]*b[6])%mod;
c[4] = (a[3]*b[1] + a[4]*b[4] + a[5]*b[7])%mod;
c[5] = (a[3]*b[2] + a[4]*b[5] + a[5]*b[8])%mod;
c[6] = (a[6]*b[0] + a[7]*b[3] + a[8]*b[6])%mod;
c[7] = (a[6]*b[1] + a[7]*b[4] + a[8]*b[7])%mod;
c[8] = (a[6]*b[2] + a[7]*b[5] + a[8]*b[8])%mod;
return c;
}
unsigned long long *logpow(unsigned long long *a, unsigned long long p)
{
if (p == 1) return a;
if (p%2 == 0)
{
unsigned long long *c = logpow(a, p>>1);
return inm(c, c);
}
else
{
unsigned long long *d = inm(a, logpow(a, p-1));
return d;
}
}
int main()
{
ifstream in("iepuri.in"); ofstream out("iepuri.out");
int a, b, c, x, y, z, n, t, i;
unsigned long long *m = new unsigned long long[9];
in>>t;
for (i=0; i<t; ++i)
{
m[3]=1; m[4]=0; m[5]=0; m[6]=0; m[7]=1; m[8]=0;
in>>x>>y>>z>>a>>b>>c>>n;
m[0]=a; m[1]=b; m[2]=c;
m = logpow(m, n-2);
out<<(m[2]*x + m[1]*y + m[0]*z)%mod<<"\n";
}
return 0;
}