Skip to content

Extended Euclid(User defined types)

type
  node
  {
    int d;
    int s;
    int t;
  }
endtype

decl
  node y,z,gcd(int a,int b);
enddecl

node gcd(int a,int b)
{
  decl
    int q,r,temp;
  enddecl

  begin
    if(b==0) then
      y.d = a;
      y.s = 1;
      y.t = 0;
    else
      q = a/b;
      r = a%b;
      z = gcd(b,r);
      temp = z.s;
      y.s = z.t;
      y.t = temp - (q*z.t);
    endif;

  return y;
  end
}

int main()
{
  decl
    node res;
    int a,b,c;
  enddecl

  begin
    c = initialize();
    y = alloc();
    read(a);
    read(b);
    res = gcd(a,b);
    write(res.d);
    write(res.s);
    write(res.t);

  return 0;
  end
}