#Synthetic division of two polynimials, returns quotient and remainder.# MODE C = LONG COMPLEX; MODE P = [~] C; MODE DR = STRUCT(P q, P r); PROC div = (P n, d)DR: (INT nn = UPB n, nd = UPB d - 1; [nn]C mn := n; [nn-nd]C q; C qr = 1/d[nd+1]; FOR j FROM UPB q DOWNTO 1 DO C qs = qr*mn[j+nd]; q[j] := qs; FOR k TO nd+1 DO mn[k+j-1] -:= qs*d[k] OD OD; (q, mn[1:nd])); PROC pp = (STRING m, P p)VOID: (print((m, newline)); FOR j TO UPB p DO print((p[j], newline)) OD); PROC tst = (P n, d)VOID: (DR a = div(n, d); pp("q:", q OF a); pp("r:", r OF a)); (4|tst((1, 2, 1), (1, 1)), #((1, 1), (0))# tst((2, 2, 2, 1), (1, 1)), #((1, 1, 1), (1))# tst((1, 3, 3, 1), (1, 1)), #((1, 2, 1), (0))# tst((1, 3, 3, 1), (1, 2, 1)), #((1, 1), (0, 0))# ~)