Pagini recente » Cod sursa (job #794078) | Cod sursa (job #2801291) | Cod sursa (job #1243611) | Cod sursa (job #1811041) | Cod sursa (job #1999107)
#include <bits/stdc++.h>
#define MaxN 200005
#define INF 2140000000
#define eps 1e-9
#define MOD 666013
#define pi 3.1415926535897932384626433832795
using namespace std;
FILE *IN,*OUT;
int T,N,X,Y,Z,A,B,C;
struct Matrix
{
int L,W,mat[3][3];
void Clear()
{
for(int i=0;i<L;i++)
for(int j=0;j<W;j++)
mat[i][j]=0;
}
void Set_Size(int x,int y)
{
L=x;
W=y;
}
void Identity()
{
this->Clear();
for(int i=0;i<L;i++)
mat[i][i]=1;
}
void Multiply(Matrix A)
{
Matrix aux;
aux.Set_Size(L,A.W);
aux.Clear();
for(int i=0;i<L;i++)
for(int j=0;j<A.W;j++)
for(int k=0;k<L;k++)
aux.mat[i][j]=(aux.mat[i][j]+1LL*mat[i][k]*A.mat[k][j])%MOD;
*this=aux;
}
void LgPow(int exp)
{
Matrix ans,base;
base=*this;
ans.Set_Size(L,W);
ans.Identity();
for(int i=0;i<31;i++)
{
if((1<<i)&exp)
ans.Multiply(base);
base.Multiply(base);
}
*this=ans;
}
}Alfa,Beta;
int main()
{
IN=fopen("iepuri.in","r");
OUT=fopen("iepuri.out","w");
fscanf(IN,"%d",&T);
Alfa.Set_Size(3,3);
Beta.Set_Size(3,1);
for(int t=1;t<=T;t++)
{
fscanf(IN,"%d%d%d%d%d%d%d",&X,&Y,&Z,&A,&B,&C,&N);
Alfa.Set_Size(3,3);
Alfa.Clear();
Beta.Clear();
Beta.mat[0][0]=X;
Beta.mat[1][0]=Y;
Beta.mat[2][0]=Z;
Alfa.mat[0][1]=Alfa.mat[1][2]=1;
Alfa.mat[2][0]=C;
Alfa.mat[2][1]=B;
Alfa.mat[2][2]=A;
Alfa.LgPow(N);
Alfa.Multiply(Beta);
fprintf(OUT,"%d\n",Alfa.mat[0][0]);
}
return 0;
}