Pagini recente » Cod sursa (job #1494501) | Cod sursa (job #258644) | Cod sursa (job #30515) | Cod sursa (job #586223) | Cod sursa (job #1980606)
#include<stdio.h>
#include<stdlib.h>
#include<fstream>
#include<iostream>
using namespace std;
const int mod=666013;
void copyMatrix(long long a[][3], long long b[][3]){
for(int r=0;r<3; r++)
for(int c=0;c<3; c++)
a[r][c]=b[r][c];
}
long long matrixMultiplicationAux(long long a[][3], long long b[][3], int r, int c){
long long rez=0;
for(int i=0;i<3;i++)
rez+=a[r][i]*b[i][c]*1LL;
return rez%mod;
}
void matrixMultiplication(long long rez[][3],long long a[][3], long long b[][3]){
for(int r=0;r<3; r++)
for(int c=0;c<3; c++)
rez[r][c]=matrixMultiplicationAux(a,b, r,c);
}
int main(){
ifstream in; ofstream out;
in.open("iepuri.in"); out.open("iepuri.out");
out.clear();
int t,x,y,z,a,b,c;
long n;
long long rez[3][3];
in>>t;
for(int i=1;i<=t;i++){
long long sol[3][3]={{1, 0 ,0}, {0, 1, 0}, {0, 0, 1}}; //initialize solution with identity matrix
long long ct[3][3]={{0, 1, 0}, {0, 0, 1}, {0, 0, 0}};
in>>x>>y>>z>>ct[0][0]>>ct[1][0]>>ct[2][0]>>n;
for(int j=0; (1<<j)<=n-2;j++){
if(((1<<j)&n-2)>0) {
matrixMultiplication(rez,sol,ct);
copyMatrix(sol,rez);
}
matrixMultiplication(rez,ct,ct);
copyMatrix(ct,rez);
}
if(n==0) out<<x;
else if (n==1) out<<y;
else if (n==2) out<<z;
else out<<z*sol[0][0]+y*sol[1][0]+x*sol[2][0];
out<<endl;
}
in.close(); out.close();
return 0;
}