Cod sursa(job #140020)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 21 februarie 2008 01:43:42
Problema Pascal Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.75 kb
var f,g:text;
    y1,y2,y3,x1,x2,x3,z,r,d,j,nr,t:longint;
    ok:boolean;
function putere(x,n:longint):longint;
var z,s:longint;
begin
     s:=0;
     z:=n;
     while x div z<>0 do
     begin
          s:=s+trunc(x div z);
          z:=z*n;
     end;
     putere:=s;
end;
begin
     assign(f,'pascal.in'); reset(f);
     assign(g,'pascal.out'); rewrite(g);
     readln(f,r,d);
     if r<2 then
     begin
          writeln(g,'0');
          close(g);
          halt;
     end;
     if d=6 then ok:=true;
     x1:=putere(r,2);    nr:=0;
     y1:=putere(r,3);
     z:=putere(r,5);
     for j:=1 to (r-1) div 2+(r-1) mod 2 do
     begin
          t:=nr;
          if ok then
          begin
               x2:=putere(r-j,2);
               x3:=putere(j,2);
               y2:=putere(r-j,3);
               y3:=putere(j,3);
               if (x1-x2-x3>0)and(y1-y2-y3>0) then inc(nr);
          end
          else
          begin
               if d=4 then
               begin
                    x2:=putere(r-j,2);
                    x3:=putere(j,2);
                    if (x1-x2-x3>0)and((x1-x2-x3)mod 2=0) then inc(nr);
               end
               else
               begin
                    case d of 2:y3:=x1;
                              3:y3:=y1;
                              5:y3:=z;
                    end;
                    x2:=putere(r-j,d);
                    x3:=putere(j,d);
                    if y3-x2-x3>0 then inc(nr);
               end;
          end;
          if (j=(r-1) div 2+(r-1) mod 2)then
          begin
               if(r mod 2=0)and(t<>nr)then nr:=(nr-1)*2+1;
               if (t=nr)or(r mod 2<>0) then nr:=nr*2;
          end;
     end;
     writeln(g,nr);
     close(g);
end.