Cod sursa(job #204202)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 22 august 2008 14:03:26
Problema Descompuneri Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.34 kb
var v,l:array[0..5000]of int64;
    m:array[0..5000,0..5000]of int64;
    n,p,r,o:int64;
    i,j,k:longint;
    f:text;
begin
   assign(f,'desc.in');
   reset(f);
   read(f,n,k);
   close(f);
   r:=0;
   while r<trunc(sqrt(n))do
   begin
   r:=r+1;
   if(n mod r=0)then begin p:=p+1;
                           v[p]:=r;
                           l[p]:=n div r;
                     end;
   end;
   r:=0;
   if v[p]=l[p] then r:=1;
   for i:=1 to p do
   v[2*p-i+1-r]:=l[i];
   p:=p*2-r;
   for i:=1 to p do
   v[i-1]:=v[i];
   p:=p-1;
   for i:=1 to p do
   m[0,i]:=1;
   for i:=1 to p do
   begin
   r:=0;
   for j:=p downto 1 do
   begin
   m[i,j]:=m[i,j+1];
   if v[i] mod v[j]=0 then begin while v[r]<>v[i] div v[j] do
                                 r:=r+1;
                                 m[i,j]:=m[i,j]+m[r,j];
                           end;
   end;
   end;
   r:=p;
   j:=1;
   assign(f,'desc.out');
   rewrite(f);
   writeln(f,m[p,1]);
   i:=p;
   while(k>0)and(r>0)do
   begin
   while v[r] mod v[j]>0 do
   j:=j+1;
   while v[i]<>v[r] div v[j] do
   i:=i-1;
   if m[i,j]<k then begin k:=k-m[i,j];
                          j:=j+1;
                    end
               else begin write(f,v[j],' ');
                          r:=i;
                    end;
   end;
   writeln(f);
   close(f);
end.