Pagini recente » Cod sursa (job #2586307) | Cod sursa (job #2758478) | Cod sursa (job #995190) | Cod sursa (job #812142) | Cod sursa (job #993962)
Cod sursa(job #993962)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define MOD 666013
using namespace std;
long long x,y,z,a,b,c,n;
long long rez[5][5],aux[5][5],tmp[5][5];
void pow(long long p)
{
/// x
for(;p;p>>=1)
{
if(p&1) /// rez*=aux
{
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
{
tmp[i][j]=0;
for(int p=1;p<=3;++p)
tmp[i][j]+=rez[i][p]*aux[p][j];
tmp[i][j]%=MOD;
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
rez[i][j]=tmp[i][j];
}
/// aux * = aux
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
{
tmp[i][j]=0;
for(int p=1;p<=3;++p)
tmp[i][j]+=aux[i][p]*aux[p][j];
tmp[i][j]%=MOD;
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
aux[i][j]=tmp[i][j];
}
}
int main()
{
int t;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
f>>t;
for(;t;--t)
{
f>>x>>y>>z>>a>>b>>c>>n;
if( n == 0 )
g<<x<<"\n";
if( n == 1 )
g<<y<<"\n";
if(n == 2 )
g<<z<<"\n";
if(n<=2)
continue;
memset(rez,0,sizeof(rez));
memset(aux,0,sizeof(aux));
rez[1][3]=c; aux[1][3]=c;
rez[2][1]=1; aux[2][1]=1;
rez[2][3]=b; aux[2][3]=b;
rez[3][2]=1; aux[3][2]=1;
rez[3][3]=a; aux[3][3]=a;
pow(n-2);
/*for(int i=1;i<=3;++i,cout<<endl)
for(int j=1;j<=3;++j)
cout<<rez[i][j]<<" ";
cout<<endl;*/
long long r=(x*rez[1][2] + y*rez[2][2] + z*rez[3][2]);
g<<r%MOD<<"\n";
}
return 0;
}