Pagini recente » Cod sursa (job #142407) | Cod sursa (job #2640098) | Cod sursa (job #1724315) | Cod sursa (job #1475836) | Cod sursa (job #2149627)
#include <bits/stdc++.h>
#define INFILE "iepuri.in"
#define OUTFILE "iepuri.out"
using namespace std;
const int sz=3;
const int MOD=666013;
ifstream in(INFILE);
ofstream out(OUTFILE);
typedef array<array<int,sz>,sz> Mat;
void Init(Mat&a){
for(int i=0;i<sz;i++){
for(int j=0;j<sz;j++){
a[i][j]=0;
}
}
}
Mat operator*(Mat a,Mat b){
Mat c;
for(int i=0;i<sz;i++){
for(int j=0;j<sz;j++){
int s=0;
for(int k=0;k<sz;k++){
s=s+a[i][k]*b[k][j];
s=s%MOD;
}
c[i][j]=s;
}
}
return c;
}
ostream& operator<<(ostream&os,Mat&a){
for(int i=0;i<sz;i++){
for(int j=0;j<sz;j++){
os<<setw(2)<<a[i][j]<<" ";
}
os<<"\n";
}
os<<"\n";
return os;
}
Mat putereLog(Mat a,int ex){
Mat rasp;
Init(rasp);
rasp[0][0]=rasp[1][1]=rasp[2][2]=1;
// cout<<rasp;
while(ex>0){
if(ex%2==1){
ex--;
rasp=rasp*a;
}
a=a*a;
ex/=2;
}
return rasp;
}
void InitFib(Mat&a,int A,int B,int C){
Init(a);
a[0][2]=C;
a[1][0]=1;
a[1][2]=B;
a[2][1]=1;
a[2][2]=A;
}
void Determinare(int X,int Y,int Z,int A,int B,int C,int N){
Mat a;
N++;
InitFib(a,A,B,C);
a=putereLog(a,N-3);
//cout<<a;
int t1=(X*a[0][2])%MOD;
int t2=(Y*a[1][2])%MOD;
int t3=(Z*a[2][2])%MOD;
int Fib=0;
Fib+=t1;
Fib=Fib%MOD;
Fib+=t2;
Fib=Fib%MOD;
Fib+=t3;
Fib=Fib%MOD;
out<<Fib<<"\n";
}
int main(){
int t;
in>>t;
for(int i=1;i<=t;i++){
int X,Y,Z,A,B,C,N;
in>>X>>Y>>Z>>A>>B>>C>>N;
Determinare(X,Y,Z,A,B,C,N);
}
return 0;
}