require "algebra"

A = AlgebraicExtensionField(Rational, "a") {|a| a**2 + a + 1}
a = A.var
P = Polynomial(A, "x")
x = P.var
f = x**4 + (2*a + 1)*x**3 + 3*a*x**2 + (-3*a - 5)*x - a + 1
p f.factorize #=> (x + a)^3(x - a + 1)



syntax highlighted by Code2HTML, v. 0.9.1