Pagini recente » Istoria paginii grigore-moisil-2011/clasament/11-12 | Diferente pentru preoni-2007/runda-1 intre reviziile 19 si 20 | Profil andreifirst | gardening | Cod sursa (job #804910)
Cod sursa(job #804910)
#include <iostream>
#include <fstream>
using namespace std;
#define mod 666013
long long m[3][3]; long long s[3][3];
long long n;
void inmulteste(long long u[][3],long long t[][3],long long r[3][3])
{ long long f,j,k;
long long d[3][3];
for (f=0;f<3;f++)
for(j=0;j<3;j++)
{ d[f][j]=0;
for(k=0;k<3;k++)
d[f][j]+=((u[f][k]%mod) * (t[k][j])%mod) % mod;
}
for (f=0;f<3;++f)
for (j=0;j<3;++j)
r[f][j]=d[f][j];
}
void putere(long long p)
{
for(;p;p=p/2)
{
if (p %2==1)
inmulteste(s,m,s);
inmulteste(m,m,m);
}
}
int main()
{ long long x,y,z,a,b,c,i,j,t,k;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
f>>t;
for (i=1;i<=t;++i)
{
f>>a>>b>>c>>x>>y>>z>>n;
m[0][0]=0;m[0][1]=1;m[0][2]=0;
m[1][0]=0;m[1][1]=0;m[1][2]=1;
m[2][0]=c%mod;m[2][1]=b%mod;m[2][2]=a%mod;
for (j=0;j<=2;++j)
for(k=0;k<=2;++k)
{
if (j==k) s[j][j]=1;
else s[j][k]=0;
}
putere(n);
k=((s[0][0]*x)%mod+(s[0][1]*y)%mod +(s[0][2] *z)%mod) % mod;
g<<k<<endl;
}
}