require "poly" local function ldiv(p1, p2) local num = p1:toarray():reverse() local den = p2:toarray():reverse() local result = {} local base = #num - #den while base >= 0 do local res = num:back() / den:back() result:insert(res) num = num:slice(1, #num - 1) for i = 1, #den - 1 do num[base + i] -= res * den[i] end base -= 1 end local quot = poly.of(result) local rem = poly.of(num) return {quot, rem} end local num = poly.of({1, -12, 0, -42}) local den = poly.of({1, -3}) local res = ldiv(num, den) print("Dividing polynomials:") print($"N = {num}") print($"D = {den}") print("---------------------") print($"Q = {res[1]}") print($"R = {res[2]}")