Pagini recente » Cod sursa (job #1274567) | Cod sursa (job #3149205) | Cod sursa (job #259614) | Cod sursa (job #262753) | Cod sursa (job #191336)
Cod sursa(job #191336)
#include<fstream.h>
//using namespace std;
long long a[200][3][3];/*
a[i] matricea a[1] la puterea 2^i
deci a un sir de matrici 1,m,m^2, ...,m^32
*/
long long T,X,Y,Z,A,B,C,N;
ofstream g("iepuri.out");
void raspuns(long long d[][3]){
long long r=d[0][0]*Z+d[0][1]*Y+d[0][2]*X;
g<<(r%666013)<<'\n';
}
void inm(long long m1[3][3],long long m2[3][3], long long m3[3][3]){
long long i, j, k,s;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
s=0;
for(k=0;k<3;k++){
s+=(m1[i][k]*m2[k][j]%666013);
s=s%666013;
}
m3[i][j]=s;
}
}
void constr(){
long long i;
for(i=1;((long long)1<<i)<=N;i++)
inm(a[i-1],a[i-1],a[i]);
}
void initi(long long d[][3]){
d[0][0]=1;
d[0][1]=0;
d[0][2]=0;
d[1][0]=0;
d[1][1]=1;
d[1][2]=0;
d[2][0]=0;
d[2][1]=0;
d[2][2]=1;
}
void copy(long long d[][3],long long e[][3]){
long long i, j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
d[i][j]=e[i][j];
}
void final(){
long long cont=0;
N-=2;
long long d[3][3],e[3][3];
initi(d);
while(N){
if(N&1){
inm(d,a[cont],e);
copy(d,e);
}
N>>=1;
cont++;
}
raspuns(d);
}
void init(){
a[0][0][0]=A;
a[0][0][1]=B;
a[0][0][2]=C;
a[0][1][0]=1;
a[0][1][1]=0;
a[0][1][2]=0;
a[0][2][0]=0;
a[0][2][1]=1;
a[0][2][2]=0;
}
int main(){
long long k;
ifstream fisier("iepuri.in");
fisier>>T;
for(k=0;k<T;k++){
fisier>>X>>Y>>Z>>A>>B>>C>>N;
init();
constr();
if(N==0)
g<<A<<'\n';
else if(N==1)
g<<B<<'\n';
else if(N==2)
g<<C<<'\n';
else final();
}
g.close();
return 0;
}