Pagini recente » Cod sursa (job #2059682) | Cod sursa (job #1289279) | Cod sursa (job #2785720) | Cod sursa (job #3198219) | Cod sursa (job #477366)
Cod sursa(job #477366)
#include<fstream>
#include<iostream>
#include<string.h>
using namespace std;
const int MODULO=666013;
void CreateMat(long long **&mat, int n, int m)
{
int i;
mat=new long long*[n];
for(i=0; i<n; ++i)
{
mat[i]=new long long[m];
}
}
void MulMat(long long** const a, long long** const b, long long ** const r)
{
int i,j,k;
for(k=0; k<3; k++)
memset(r[k],0,3*sizeof(long long));
for(k=0; k<3; k++)
{
for(i=0; i<3; ++i)
{
for(j=0; j<3; ++j)
{
r[i][j]=r[i][j]+((a[i][k]*b[k][j]))%MODULO;
}
}
}
}
int main()
{
long long **a,**c,**aux,**sol,**swap,i,j;
int X,Y,Z,A,B,C,T;
int N;
CreateMat(a,5,5);
CreateMat(c,5,5);
CreateMat(aux,5,5);
CreateMat(sol,5,5);
fstream fin("iepuri.in",fstream::in);
fstream fout("iepuri.out",fstream::out);
fin>>T;
for(i=0; i<T; ++i)
{
fin>>X>>Y>>Z>>A>>B>>C>>N;
N-=2;
a[1][1]=a[1][2]=a[2][0]=a[2][2]=0;
a[1][0]=a[2][1]=1;
a[0][0]=A;
a[0][1]=B;
a[0][2]=C;
sol[0][1]=sol[0][2]=sol[1][0]=sol[1][2]=sol[2][0]=sol[2][1]=0;
sol[0][0]=sol[1][1]=sol[2][2]=1;
while(N)
{
if( N & 1 )
{
MulMat(sol,a,aux);
swap=aux;
aux=sol;
sol=swap;
}
MulMat(a,a,c);
swap=c;
c=a;
a=swap;
N>>=1;
}
fout<<(sol[0][0]*Z+sol[0][1]*Y+sol[0][2]*X)%MODULO<<endl;
}
fin.close();
fout.close();
return 0;
}