Cod sursa(job #25056)

Utilizator fogabFodor Gabor fogab Data 4 martie 2007 10:19:39
Problema Kperm Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 0.74 kb
const p=666013;
var f:text;
    a1,a2,n,k,r,r2,i,sol:longint;

function go(a,b:longint):longint;
var h:longint;
begin
if b=1 then go:=a
  else if a mod 2=0 then
    begin
    h:=go(a,b div 2);
    go:=(h*h) mod p;
    end
  else begin
       h:=go(a,b div 2);
       go:=(h*h*a) mod p;
       end;
end;

begin
assign(f,'kperm.in');
reset(f);
readln(f,n,k);
close(f);
if n=k then
   begin
   sol:=1;
   for i:=2 to n do
     sol:=(sol*i) mod p;
   end
else begin
 r:=n mod k;
 r2:=k-r;
 sol:=(r*r2) mod p;
 a1:=1;
 for i:=2 to n div k do
   a1:=(a1*i) mod p;
 a1:=go(a1,r2);
 a2:=go(a1*(i+1),r);
 a1:=(a1*a2) mod p;
 sol:=(sol*a1) mod p;
 end;
assign(f,'kperm.out');
rewrite(f);
writeln(f,sol);
close(f);
end.