func poly_long_div(rn, rd) {   var n = rn.map{_} var gd = rd.len   if (n.len >= gd) { return(gather { while (n.len >= gd) { var piv = n[0]/rd[0] take(piv) { |i| n[i] -= (rd[i] * piv) } << ^(n.len `min` gd) n.shift } }, n) }   return([0], rn) }