Cod sursa(job #116529)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 18 decembrie 2007 20:20:36
Problema Multiplu Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.48 kb
type pelem=^elem;
     elem=record
       info:int64;
       next:pelem;
     end;
var fi,fo:text;
    rest:array[1..2000000]of longint;
    a,b:longint;
    first,last:pelem;
    M,numar,numar1,numar2,rez,rst:int64;
procedure qin(vl:int64);
var p:pelem;
begin
  new(p);
  p^.info:=vl;
  p^.next:=nil;
  if first=nil then
    begin
      first:=p; last:=first; exit; end;
  last^.next:=p;
  last:=p;
end;
procedure qout(var vl:int64);
var p:pelem;
begin
  vl:=first^.info;
  p:=first;
  first:=first^.next;
  dispose(p);
end;
procedure solv;
begin
  while first<>nil do
    begin
      qout(numar);
      numar1:=numar*10;
      if numar1 mod M=0 then begin rez:=numar1; exit; end;
      if rest[numar1 mod M]=0 then
         begin
           qin(numar1);
           rst:=numar1 mod M;
           rest[rst]:=1; end;
      numar2:=numar*10+1;
      if numar2 mod M=0 then begin rez:=numar2; exit; end;
      if rest[numar2 mod M]=0 then
         begin
           qin(numar2);
           rst:=numar2 mod M;
           rest[rst]:=1; end;
    end;
end;
function ggt(a,b:longint):longint;
begin
  while a<>b do
    if a>b then a:=a-b
           else b:=b-a;
  ggt:=a;
end;
function kgv(a,b:longint):longint;
begin
  kgv:=a*b div ggt(a,b);
end;
begin
  assign(fi,'multiplu.in'); reset(fi);
  assign(fo,'multiplu.out'); rewrite(fo);
  read(fi,a,b);
  M:=kgv(a,b);
  qin(1); rest[1]:=1;
  solv;
  writeln(fo,rez);
  close(fi);
  close(fo);
end.