Pagini recente » Cod sursa (job #2076777) | Cod sursa (job #2802826) | Cod sursa (job #3241349) | Cod sursa (job #2597399) | Cod sursa (job #1135506)
#include<fstream>
#define rest 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long int M[5][5],n,IN[5][5],C[5][5];
unsigned int t,x,y,z,a,b,c;
void inmultire(long long int a[5][5],long long int b[5][5]){
long long int s;
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j){
s=0;
for(int k=1;k<=3;++k){
s+=((a[i][k]*b[k][j])%rest)%rest;
}
C[i][j]=s%rest;
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
a[i][j]=C[i][j];
}
void putere(int n){
long long int aux[5][5];
for(int i=1;i<=3;++i){
for(int j=1;j<=3;++j){
IN[i][j]=0;
aux[i][j]=M[i][j];
}
}
IN[1][1]=IN[2][2]=IN[3][3]=1;
for(;n;n>>=1){
if(n & 1)
inmultire(IN,aux);
inmultire(aux,aux);
}
M[1][1]=IN[1][1];
M[1][2]=IN[1][2];
M[1][3]=IN[1][3];
}
int main(){
f>>t;
for(int i=1;i<=t;++i){
f>>x>>y>>z>>a>>b>>c>>n;
M[1][1]=a;
M[1][2]=b;
M[1][3]=c;
M[2][1]=M[3][2]=1;
M[2][2]=M[2][3]=M[3][1]=M[3][3]=0;
putere(n-2);
long long int s= ((M[1][1]*z)%rest +(M[1][2]*y)%rest + (M[1][3]*x)%rest)%rest;
g<<s<<"\n";
}
return 0;
}