Cod sursa(job #258238)

Utilizator MihaiBunBunget Mihai MihaiBun Data 14 februarie 2009 21:35:54
Problema Pascal Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 4.04 kb
program pascal;
var f:text;
    r,d,i,nr,x,p,s,s1,z,x1,y1,z1,y:longint;
begin
  assign(f,'pascal.in');
  reset(f);
  readln(f,r,d);
  close(f);
  assign(f,'pascal.out');
  rewrite(f);
  case d of
  2,3,5:begin
           nr:=0;
           x:=0;
           p:=r;
           while p mod d=0 do begin
                                 x:=x+1;
                                 p:=p div d
                                 end;
           if x>0 then nr:=nr+1;
           for i:=2 to r div 2 do
             begin
                z:=0;
                p:=r-i+1;
                while p mod d=0 do begin
                                      z:=z+1;
                                      p:=p div d
                                     end;
                y:=0;
                p:=i;
                while p mod d=0 do begin
                                      y:=y+1;
                                      p:=p div d
                                     end;
                x:=x+z-y;
                if x>0 then nr:=nr+1;
             end;
             if r mod 2=1 then nr:=nr*2
                         else if x>0 then nr:=(nr-1)*2+1
                                     else nr:=nr*2
        end;
      4:begin
          d:=2;
          nr:=0;
           x:=0;
           p:=r;
           while p mod d=0 do begin
                                 x:=x+1;
                                 p:=p div d
                                 end;
           if x>1 then nr:=nr+1;
           for i:=2 to r div 2 do
             begin
                z:=0;
                p:=r-i+1;
                while p mod d=0 do begin
                                      z:=z+1;
                                      p:=p div d
                                     end;
                y:=0;
                p:=i;
                while p mod d=0 do begin
                                      y:=y+1;
                                      p:=p div d
                                     end;
                x:=x+z-y;
                if x>1 then nr:=nr+1;
             end;
             if r mod 2=1 then nr:=nr*2
                         else if x>0 then nr:=(nr-1)*2+1
                                     else nr:=nr*2
        end;
      6:begin
          d:=2;
          nr:=0;
           x:=0;
           p:=r;
           while p mod d=0 do begin
                                 x:=x+1;
                                 p:=p div d
                                 end;
           d:=3;
          nr:=0;
           x1:=0;
           p:=r;
           while p mod d=0 do begin
                                 x1:=x1+1;
                                 p:=p div d
                                 end;
           if (x>0)and(x1>0) then nr:=nr+1;
           for i:=2 to r div 2 do
             begin
                z:=0;
                p:=r-i+1;
                while p mod 2=0 do begin
                                      z:=z+1;
                                      p:=p div 2
                                     end;
                y:=0;
                p:=i;
                while p mod 2=0 do begin
                                      y:=y+1;
                                      p:=p div 2
                                     end;
                x:=x+z-y;
                z1:=0;
                p:=r-i+1;
                while p mod 3=0 do begin
                                      z1:=z1+1;
                                      p:=p div 3
                                     end;
                y1:=0;
                p:=i;
                while p mod 3=0 do begin
                                      y1:=y1+1;
                                      p:=p div 3
                                     end;
                x1:=x1+z1-y1;
                if (x>0)and(x1>0) then nr:=nr+1;
             end;
             if r mod 2=1 then nr:=nr*2
                         else if (x>0)and(x1>0) then nr:=(nr-1)*2+1
                                     else nr:=nr*2
        end;
  end;
writeln(f,nr);
close(f)
end.