Mai intai trebuie sa te autentifici.
Cod sursa(job #872147)
Utilizator | Data | 5 februarie 2013 20:35:10 | |
---|---|---|---|
Problema | Iepuri | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.72 kb |
#include<fstream>
using namespace std;
#define mod 666013
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
unsigned long long *putere(unsigned long long *a, int p);
unsigned long long *inmultire(unsigned long long *a,unsigned long long *b );
int main()
{
int x, y, z, a, b, c, n, t;
unsigned long long *m = new unsigned long long[9];
fin >> t;
for( int i = 1; i <= t; ++i )
{
fin >> x >> y >> z >> a >> b >> c >> n;
m[1] = m[3] = m[4] = m[5] = 0;
m[2] = m[6] = 1;
m[7] = c;
m[8] = b;
m[9] = a;
m = putere(m, n-2);
fout << ((m[7]*x)%mod + (m[8]*y)%mod + (m[9]*z)%mod)%mod << '\n';
}
fin.close();
fout.close();
return 0;
}
unsigned long long *putere(unsigned long long *a, int p)
{
if( p == 1 )
return a;
unsigned long long *aux;
if( p % 2 == 0 )
{
aux = putere( inmultire(a, a), p / 2 );
return aux;
}
else
{
aux = inmultire( a, putere( inmultire(a, a), p/2) );
return aux;
}
}
unsigned long long *inmultire(unsigned long long *x,unsigned long long *y )
{
unsigned long long *z = new unsigned long long[9];
z[1] = ((x[1]*y[1])%mod + (x[2]*y[4])%mod + (x[3]*y[7])%mod)%mod;
z[2] = ((x[1]*y[2])%mod + (x[2]*y[5])%mod + (x[3]*y[8])%mod)%mod;
z[3] = ((x[1]*y[3])%mod + (x[2]*y[6])%mod + (x[3]*y[9])%mod)%mod;
z[4] = ((x[4]*y[1])%mod + (x[5]*y[4])%mod + (x[6]*y[7])%mod)%mod;
z[5] = ((x[4]*y[2])%mod + (x[5]*y[5])%mod + (x[6]*y[8])%mod)%mod;
z[6] = ((x[4]*y[3])%mod + (x[5]*y[6])%mod + (x[6]*y[9])%mod)%mod;
z[7] = ((x[7]*y[1])%mod + (x[8]*y[4])%mod + (x[9]*y[7])%mod)%mod;
z[8] = ((x[7]*y[2])%mod + (x[8]*y[5])%mod + (x[9]*y[8])%mod)%mod;
z[9] = ((x[7]*y[3])%mod + (x[8]*y[6])%mod + (x[9]*y[9])%mod)%mod;
return z;
}