Pagini recente » Cod sursa (job #1874873) | Cod sursa (job #2546895) | Cod sursa (job #2329093) | Cod sursa (job #1491461) | Cod sursa (job #3243242)
#include <iostream>
#include <fstream>
using namespace std;
int const mod=666013;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
void inmultireMatOrd3(unsigned long long mat1[][3], unsigned long long mat2[][3])
{
unsigned long long rez[3][3]= {0};
int i, j, k;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
for(k=0; k<3; k++)
rez[i][j]=rez[i][j]+mat1[i][k]*mat2[k][j]%mod;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
mat1[i][j]=rez[i][j]%mod;
}
void expLogMatTriFibo(unsigned long long matTriFibo[][3], unsigned long long exp)
{
unsigned long long rez[3][3]= {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
int i, j;
while(exp>0)
{
if(exp%2==1)
inmultireMatOrd3(rez, matTriFibo);
inmultireMatOrd3(matTriFibo, matTriFibo);
exp/=2;
}
for(i=0; i<3; i++)
for(j=0; j<3; j++)
matTriFibo[i][j]=rez[i][j];
}
unsigned long long inmultireMatOrd3Ord13(unsigned long long matTriFibo[][3], int xyz[][1])
{
int i, j;
unsigned long long rez=0;
for(j=0; j<3; j++)
rez=rez+matTriFibo[0][j]*xyz[j][0];
return rez%mod;
}
int main()
{
int t, i, j, k, x, y, z, a, b, c, n, xyz[3][1];
unsigned long long matTriFibo[3][3];
f>>t;
for(k=1; k<=t; k++)
{
f>>x>>y>>z>>a>>b>>c>>n;
matTriFibo[0][0]=a;
matTriFibo[0][1]=b;
matTriFibo[0][2]=c;
for(i=1; i<3; i++)
for(j=0; j<3; j++)
matTriFibo[i][j]=0;
matTriFibo[1][0]=1;
matTriFibo[2][1]=1;
xyz[0][0]=z;
xyz[1][0]=y;
xyz[2][0]=x;
expLogMatTriFibo(matTriFibo, n-2);
g<<inmultireMatOrd3Ord13(matTriFibo, xyz)<<'\n';
}
f.close();
g.close();
return 0;
}