MMOD29 - CALCULATE POW(2004,X) MOD 29

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
{$inline on}
uses math;
var
  x             :       longint;

function get(a,n:longint):longint;
    var
      k,p,t:longint;
    begin
      if n=0 then exit(0);
      if n=1 then exit(1);
      k:=n>>1;
      p:=get(a,k);
      t:=(p*p*(a-1)+p<<1) mod 29;
      if n and 1=0 then exit(t);
      exit(((a*t)+1) mod 29);
    end;

begin
  read(x);
  while (x>0) do
    begin
      writeln((get(2,2*x+1)*get(3,x+1)*get(167,x+1)) mod 29);
      read(x);
    end;
end.

Download