Pagini recente » Cod sursa (job #1027961) | Cod sursa (job #708609) | Cod sursa (job #2805376) | Cod sursa (job #934186) | Cod sursa (job #450083)
Cod sursa(job #450083)
#include <fstream>
using namespace std;
ifstream fin; ofstream fout;
short i,T; int a,b,c,A,B,C; long n;
long long un[4][4],doi[4][4];
void transfer () {
un[0][0]=doi[0][0]; un[0][1]=doi[0][1]; un[0][2]=doi[0][2];
un[1][0]=doi[1][0]; un[1][1]=doi[1][1]; un[1][2]=doi[1][2];
un[2][0]=doi[2][0]; un[2][1]=doi[2][1]; un[2][2]=doi[2][2];
}
void sqr () {
doi[0][0]=(un[0][0]*un[0][0]+un[0][1]*un[1][0]+un[0][2]*un[2][0])%666013;
doi[0][1]=(un[0][0]*un[0][1]+un[0][1]*un[1][1]+un[0][2]*un[2][1])%666013;
doi[0][2]=(un[0][0]*un[0][2]+un[0][1]*un[1][2]+un[0][2]*un[2][2])%666013;
doi[1][0]=(un[1][0]*un[0][0]+un[1][1]*un[1][0]+un[1][2]*un[2][0])%666013;
doi[1][1]=(un[1][0]*un[0][1]+un[1][1]*un[1][1]+un[1][2]*un[2][1])%666013;
doi[1][2]=(un[1][0]*un[0][2]+un[1][1]*un[1][2]+un[1][2]*un[2][2])%666013;
doi[2][0]=(un[2][0]*un[0][0]+un[2][1]*un[1][0]+un[2][2]*un[2][0])%666013;
doi[2][1]=(un[2][0]*un[0][1]+un[2][1]*un[1][1]+un[2][2]*un[2][1])%666013;
doi[2][2]=(un[2][0]*un[0][2]+un[2][1]*un[1][2]+un[2][2]*un[2][2])%666013;
transfer ();
}
void mult () {
doi[0][0]=un[0][1]; doi[0][1]=un[0][2];
doi[0][2]=(un[0][0]*A+un[0][1]*B+un[0][2]*C)%666013;
doi[1][0]=un[1][1]; doi[1][1]=un[1][2];
doi[1][2]=(un[1][0]*A+un[1][1]*B+un[1][2]*C)%666013;
doi[2][0]=un[2][1]; doi[2][1]=un[2][2];
doi[2][2]=(un[2][0]*A+un[2][1]*B+un[2][2]*C)%666013;
transfer ();
}
void putere (long x) {
if (x>1) {
putere (x/2); sqr ();
if (x%2) mult ();
}
}
void afisare (long x[4][4]) {
fout<<x[0][0]<<" "<<x[0][1]<<" "<<x[0][2]<<endl;
fout<<x[1][0]<<" "<<x[1][1]<<" "<<x[1][2]<<endl;
fout<<x[2][0]<<" "<<x[2][1]<<" "<<x[2][2]<<endl;
fout<<endl;
}
int main () {
fin.open ("iepuri.in"); fout.open ("iepuri.out");
fin>>T;
for (i=0; i<T; i++) {
fin>>a>>b>>c>>C>>B>>A>>n;
un[0][0]=0; un[0][1]=0; un[0][2]=A;
un[1][0]=1; un[1][1]=0; un[1][2]=B;
un[2][0]=0; un[2][1]=1; un[2][2]=C;
putere (n-2);
fout<<(a*un[0][2]+b*un[1][2]+c*un[2][2])%666013<<endl;
}
fin.close (); fout.close ();
return 0;
}