Cod sursa(job #97283)

Utilizator Adrian001Vladulescu Adrian Adrian001 Data 5 noiembrie 2007 23:39:04
Problema Iepuri Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.2 kb
Program cel;
type matrice=array[1..3,1..3] of longint;
     vector=array[1..100] of byte;
var f,g:text;
    n,a1,b,c,x1,y,z,t,k,i,j:longint;
    a:matrice;
    x:vector;

procedure descompunere(n:longint);
Begin
k:=0;
While n>=2 do
 Begin
  inc(k);
  x[k]:=n mod 2;
  n:=n div 2;
 end;
inc(k);
x[k]:=1;
end;

procedure inmultire(var p:matrice;a,b:matrice);
var i,j,k:integer;
Begin
For i:=1 to 3 do
 For j:=1 to 3 do
  Begin
   p[i,j]:=0;
   For k:=1 to 3 do p[i,j]:=p[i,j]+a[i,k]*b[k,j];
   p[i,j]:=p[i,j] mod 666013
  end;
end;


procedure putere(var a:matrice);
var i,j:integer;
    d:matrice;
Begin
For i:=1 to 3 do
 For j:=1 to 3 do
  If i=j then d[i,j]:=1
         else d[i,j]:=0;
For i:=k downto 1 do
Begin
 inmultire(d,d,d);
 If x[i]=1 then inmultire(d,d,a);
end;
a:=d;
end;

Begin
Assign(f,'iepuri.in');Reset(f);
Assign(g,'iepuri.out');Rewrite(g);
Readln(f,t);
For i:=1 to t do
 Begin
  Readln(f,x1,y,z,a1,b,c,n);
  a[1,1]:=0;
  a[1,2]:=1;
  a[1,3]:=0;
  a[2,1]:=0;
  a[2,2]:=0;
  a[2,3]:=1;
  a[3,1]:=c;
  a[3,2]:=b;
  a[3,3]:=a1;
  descompunere(n);
  putere(a);
  Writeln(g,(x1*a[1,1]+y*a[1,2]+z*a[1,3]) mod 666013);
 end;
Close(f);
Close(g);
end.