Cod sursa(job #5046)

Utilizator fogabFodor Gabor fogab Data 9 ianuarie 2007 21:31:08
Problema Pascal Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.01 kb
var f:text;
    i,n,p,fa,sol:longint;
    m:byte;
    r,r2:array[0..5000000] of longint;
begin
assign(f,'pascal.in');
reset(f);
readln(f,n,m);
close(f);
if m=6 then begin
            for i:=1 to n do begin
                  p:=i;
                  while (p mod 2=0) do begin
                   p:=p div 2;
                   inc(fa);
                   end;
                  r[i]:=fa+r[i-1];
                  fa:=0;
                  p:=i;
                  while (p mod 3=0) do begin
                   p:=p div 3;
                   inc(fa);
                   end;
                  r2[i]:=fa+r2[i-1];
                  fa:=0;
                  end;
            for i:=1 to ((n-1) div 2) do
                if (r[n]-r[n-i]-r[i]>0) and
                   (r2[n]-r2[n-i]-r2[i]>0) then inc(sol);
            sol:=sol*2;
            if n mod 2=0 then
               if (r[n]-2*r[n div 2]>0) and
                  (r2[n]-2*r2[n div 2]>0) then inc(sol);
            end
else if m=4 then begin
for i:=1 to n do begin
                  p:=i;
                  while (p mod 2=0) do begin
                   p:=p div 2;
                   inc(fa);
                   end;
                  r[i]:=fa+r[i-1];
                  fa:=0;
                  end;
                  for i:=1 to ((n-1) div 2) do
                    if r[n]-r[n-i]-r[i]>1 then inc(sol);
                  sol:=sol*2;
                  if n mod 2=0 then
                     if r[n]-2*r[n div 2]>1 then inc(sol);
                  end else begin
for i:=1 to n do begin
                  p:=i;
                  while (p mod m=0) do begin
                   p:=p div m;
                   inc(fa);
                   end;
                  r[i]:=fa+r[i-1];
                  fa:=0;
                  end;
for i:=1 to ((n-1) div 2) do
  if r[n]-r[n-i]-r[i]>0 then inc(sol);
  sol:=sol*2;
  if n mod 2=0 then
     if r[n]-2*r[n div 2]>0 then inc(sol);
  end;
assign(f,'pascal.out');
rewrite(f);
writeln(f,sol);
close(f);
end.