Pagini recente » Drumuri5 | Monitorul de evaluare | Diferente pentru utilizator/c_ovidiu intre reviziile 118 si 70 | Ksplit | Cod sursa (job #804900)
Cod sursa(job #804900)
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;
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];
d[0][0]=0;d[0][1]=0;d[0][2]=0;d[1][0]=0;d[1][1]=0;d[1][2]=0;d[2][0]=0;d[2][1]=0;d[2][2]=0;
for (f=0;f<3;f++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
d[f][j]=d[f][j]+((u[f][k]*t[k][j])%mod);
d[f][j]%=mod;
}
for (f=0;f<3;++f)
for (j=0;j<3;++j)
r[f][j]=d[f][j];
}
void imparte(long long a[3][3])
{long long i,j;
for (i=0;i<3;++i)
for(j=0;j<3;++j)
a[i][j]=a[i][j] % mod;
}
void putere(long long p)
{
for(;p;p=p/2)
{
if (p %2==1)
{
inmulteste(s,m,s);
imparte(s);
}
inmulteste(m,m,m);
imparte(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]%mod)*x)%mod+((s[0][1]%mod)*y)%mod+((s[0][2] % mod )*z)%mod)%mod;
g<<k<<endl;
}
}