Cod sursa(job #30325)

Utilizator ScrazyRobert Szasz Scrazy Data 13 martie 2007 19:12:45
Problema Pascal Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.58 kb
type tomb=array[1..100] of word;
var tmh,tmsz,v1h,v2h,vh:tomb;
    m,n,db,x,y,o,i,j,z:longint;
    f:text;
    ok:boolean;

procedure felbontm;
var i,k:word;
begin
  i:=2;
  db:=0;
  while m<>1 do begin
    k:=0;
    if m mod i=0 then begin
    db:=db+1;
    while m mod i =0 do begin
      m:=m div i;
      k:=k+1;
    end;
    tmsz[db]:=i;
    tmh[db]:=k;
    end;
    i:=i+1;
  end;
end;

procedure felbont(var v:tomb;x:longint);
var i,k:word;
begin
  i:=1;
  while i<=db do begin
    k:=0;
    v[i]:=0;
    if x mod tmsz[i]=0 then begin
      while x mod tmsz[i]=0 do begin
        x:=x div tmsz[i];
        k:=k+1;
      end;
      v[i]:=k;

    end;
    i:=i+1;
  end;
end;


begin
  assign(f,'pascal.in');
  reset(f);
  readln(f,n,m);
  close(f);
  n:=n+1;
  felbontm;
  o:=0;
  z:=(n div 2) -1;
  for i:=1 to z do begin
    ok:=true;
    x:=n-i;
    y:=i;
    felbont(v1h,x);
    for j:=1 to db do vh[j]:=vh[j]+v1h[j];
    felbont(v2h,y);
    for j:=1 to db do vh[j]:=vh[j]-v2h[j];

    for j:=1 to db do
      if tmh[j]>vh[j] then ok:=false;

    if ok then o:=o+1;

  end;

  o:=2*o;
  assign(f,'pascal.out');
  rewrite(f);

  if odd(n) then begin
    i:=i+1;

    ok:=true;
    x:=n-i;
    y:=i;
    felbont(v1h,x);
    for j:=1 to db do vh[j]:=vh[j]+v1h[j];
    felbont(v2h,y);
    for j:=1 to db do vh[j]:=vh[j]-v2h[j];

    for j:=1 to db do
      if tmh[j]>vh[j] then ok:=false;

    if ok then o:=o+1;

    writeln(f,o);
    close(f);
  end

  else begin

   writeln(f,o);
   close(f);
  end;

end.