Cod sursa(job #164548)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 24 martie 2008 14:53:00
Problema Iepuri Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.53 kb
program iepuri;
type vect = array [1..3,1..3] of longint;
var A : vect;
    m,n,j : longint;
    x,y,z : integer;
    i,T : shortint;
    f,g : text;

function pat(A,B:vect):vect;
var S : vect;
begin
S[1,1] := (A[1,1]*B[1,1]) mod 666013 + (A[1,2]*B[2,1]) mod 666013 + (A[1,3]*B[3,1]) mod 666013;
S[1,2] := (A[1,1]*B[1,2]) mod 666013 + (A[1,2]*B[2,2]) mod 666013 + (A[1,3]*B[3,2]) mod 666013;
S[1,3] := (A[1,1]*B[1,3]) mod 666013 + (A[1,2]*B[2,3]) mod 666013 + (A[1,3]*B[3,3]) mod 666013;

S[2,1] := (A[2,1]*B[1,1]) mod 666013 + (A[2,2]*B[2,1]) mod 666013 + (A[2,3]*B[3,1]) mod 666013;
S[2,2] := (A[2,1]*B[1,2]) mod 666013 + (A[2,2]*B[2,2]) mod 666013 + (A[2,3]*B[3,2]) mod 666013;
S[2,3] := (A[2,1]*B[1,3]) mod 666013 + (A[2,2]*B[2,3]) mod 666013 + (A[2,3]*B[3,3]) mod 666013;

S[3,1] := (A[3,1]*B[1,1]) mod 666013 + (A[3,2]*B[2,1]) mod 666013 + (A[3,3]*B[3,1]) mod 666013;
S[3,2] := (A[3,1]*B[1,2]) mod 666013 + (A[3,2]*B[2,2]) mod 666013 + (A[3,3]*B[3,2]) mod 666013;
S[3,3] := (A[3,1]*B[1,3]) mod 666013 + (A[3,2]*B[2,3]) mod 666013 + (A[3,3]*B[3,3]) mod 666013;

pat := S;
end;

function pt(A:vect):vect;
var S : vect;
begin
S[1,1] := (A[1,1]*A[1,1]) mod 666013 + (A[1,2]*A[2,1]) mod 666013 + (A[1,3]*A[3,1]) mod 666013;
S[1,2] := (A[1,1]*A[1,2]) mod 666013 + (A[1,2]*A[2,2]) mod 666013 + (A[1,3]*A[3,2]) mod 666013;
S[1,3] := (A[1,1]*A[1,3]) mod 666013 + (A[1,2]*A[2,3]) mod 666013 + (A[1,3]*A[3,3]) mod 666013;

S[2,1] := (A[2,1]*A[1,1]) mod 666013 + (A[2,2]*A[2,1]) mod 666013 + (A[2,3]*A[3,1]) mod 666013;
S[2,2] := (A[2,1]*A[1,2]) mod 666013 + (A[2,2]*A[2,2]) mod 666013 + (A[2,3]*A[3,2]) mod 666013;
S[2,3] := (A[2,1]*A[1,3]) mod 666013 + (A[2,2]*A[2,3]) mod 666013 + (A[2,3]*A[3,3]) mod 666013;

S[3,1] := (A[3,1]*A[1,1]) mod 666013 + (A[3,2]*A[2,1]) mod 666013 + (A[3,3]*A[3,1]) mod 666013;
S[3,2] := (A[3,1]*A[1,2]) mod 666013 + (A[3,2]*A[2,2]) mod 666013 + (A[3,3]*A[3,2]) mod 666013;
S[3,3] := (A[3,1]*A[1,3]) mod 666013 + (A[3,2]*A[2,3]) mod 666013 + (A[3,3]*A[3,3]) mod 666013;

pt := S;
end;


function lm(x:vect;y:longint):vect;
begin
if y=1 then lm := x
else
if y mod 2 = 0 then lm := pt(lm(x,y div 2))
               else lm := pat(lm(x,y-1),x);
end;




begin
assign(f,'iepuri.in');
reset(f);
assign(g,'iepuri.out');
rewrite(g);
readln(f,T);

for i := 1 to T do begin

A[1,1] := 0;
A[1,2] := 1;
A[1,3] := 0;

A[2,1] := 0;
A[2,2] := 0;
A[2,3] := 1;

readln(f,x,y,z,A[3,3],A[3,2],A[3,1],n);

A := lm(A,n);

m := A[1,1]*x+A[1,2]*y+A[1,3]*z;

writeln(g,m);
end;
close(f);
close(g);
end.