Pagini recente » Cod sursa (job #726915) | Cod sursa (job #701732) | Borderou de evaluare (job #1778921) | Cod sursa (job #701431) | Cod sursa (job #3351682)
/*
* author [dubit]
*/
#include <bits/stdc++.h>
using namespace std;
#define mod 666013
struct matr {
int mat[3][3];
matr() {
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
mat[i][j]=0;
}
};
matr multiply(matr a,matr b) {
matr c;
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
for (int k=0;k<3;k++) {
c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
c.mat[i][j]%=mod;
}
return c;
}
matr power(matr base,int p) {
matr r;
r.mat[0][0]=r.mat[1][1]=r.mat[2][2]=1;
while (p>0) {
if (p%2)
r=multiply(r,base);
base=multiply(base,base);
p/=2;
}
return r;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
int t;
cin>>t;
while (t--) {
int x,y,z,a,b,c,n;
cin>>x>>y>>z>>a>>b>>c>>n;
matr m;
m.mat[0][0]=a;
m.mat[0][1]=b;
m.mat[0][2]=c;
m.mat[1][0]=m.mat[2][1]=1;
m.mat[1][1]=m.mat[1][2]=m.mat[2][0]=m.mat[2][2]=0;
matr mm=power(m,n-2);
cout<<(mm.mat[0][0]*z+mm.mat[0][1]*y+mm.mat[0][2]*x)%mod<<'\n';
}
return 0;
}