Pagini recente » Cod sursa (job #3169600) | Cod sursa (job #2431483) | Cod sursa (job #1753579) | Cod sursa (job #205754) | Cod sursa (job #2647896)
#include <stdio.h>
using namespace std;
#define MOD 666013
struct Matrice {
long long a1,a2,a3,a4,a5,a6,a7,a8,a9;
};
Matrice matrez,matbaza,matinit;
Matrice inmultire(Matrice A,Matrice B){ ///inm mat A cu mat B
Matrice rez;
rez.a1=((A.a1*B.a1)%MOD+(A.a2*B.a4)%MOD+(A.a3*B.a7)%MOD)%MOD;
rez.a2=((A.a1*B.a2)%MOD+(A.a2*B.a5)%MOD+(A.a3*B.a8)%MOD)%MOD;
rez.a3=((A.a1*B.a3)%MOD+(A.a2*B.a6)%MOD+(A.a3*B.a9)%MOD)%MOD;
rez.a4=((A.a4*B.a1)%MOD+(A.a5*B.a4)%MOD+(A.a6*B.a7)%MOD)%MOD;
rez.a5=((A.a4*B.a2)%MOD+(A.a5*B.a5)%MOD+(A.a6*B.a8)%MOD)%MOD;
rez.a6=((A.a4*B.a3)%MOD+(A.a5*B.a6)%MOD+(A.a6*B.a9)%MOD)%MOD;
rez.a7=((A.a7*B.a1)%MOD+(A.a8*B.a4)%MOD+(A.a9*B.a7)%MOD)%MOD;
rez.a8=((A.a7*B.a2)%MOD+(A.a8*B.a5)%MOD+(A.a9*B.a8)%MOD)%MOD;
rez.a9=((A.a7*B.a3)%MOD+(A.a8*B.a6)%MOD+(A.a9*B.a9)%MOD)%MOD;
return rez;
}
int main()
{
FILE *fin,*fout;
fin=fopen("iepuri.in","r");
fout=fopen("iepuri.out","w");
long long T,n,z0,z1,z2,A,B,C,i;
fscanf(fin,"%lld",&T);
for(i=0;i<T;i++){
fscanf(fin,"%lld%lld%lld%lld%lld%lld%lld",&z0,&z1,&z2,&A,&B,&C,&n);
matbaza.a1=matbaza.a2=matbaza.a5=matbaza.a7=0; ///matricea constanta
matbaza.a4=matbaza.a8=1;
matbaza.a3=C;
matbaza.a6=B;
matbaza.a9=A;
matrez.a1=matrez.a5=matrez.a9=1;
matrez.a2=matrez.a3=matrez.a4=matrez.a6=matrez.a7=matrez.a8=0; ///matricea rezultata - o initializam cu mat identitate
matinit.a1=z0;
matinit.a2=z1;
matinit.a3=z2;
n--; ///matbaza^n-1
while(n>0){
if(n%2==0){
matbaza=inmultire(matbaza,matbaza);
n/=2;
}
else{
matrez=inmultire(matrez,matbaza);
n--;
}
}
matrez=inmultire(matinit,matrez);
fprintf(fout,"%lld\n",matrez.a2);
}
fclose(fin);
fclose(fout);
return 0;
}