Cod sursa(job #258238)
Utilizator | 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.