f := c300*x^3+c210*x^2*y+c120*x*y^2+c030*y^3+c021*y^2*z+c012*y*z^2+c003*z^3+c102*x*z^2+c201*x^2*z+c111*x*y*z; g := u*x+v*y+w*z: C := {coeffs(collect(subs(z=solve(g,z),f),[x,y,z],distributed),[x,y,z])} union {coeffs(collect(subs(y=solve(g,y),f),[x,y,z],distributed),[x,y,z])} union {coeffs(collect(subs(x=solve(g,x),f),[x,y,z],distributed),[x,y,z])}: for p in C do lprint(numer(factor(p))); od: