This page demonstrates Magma's ability to factor multivariate polynomials over algebraic function fields with arbitrary numbers of algebraic and transcendental generators, and in small characteristic. (This involves difficult inseparable extensions.) Timings are for an Opteron 246 (2GHz).
> p := 2; > F<t,u> := FunctionField(GF(p), 2); > F; Multivariate rational function field of rank 2 over GF(2) Variables: t, u > K<a,b,c> := AffineAlgebra<F,a,b,c| a^2 + t*b, b^4 + b^2 + c, c^2 + t*u>; > K; Affine Algebra of rank 3 over Multivariate rational function field of rank 2 over GF(2) Lexicographical Order Variables: a, b, c Quotient relations: [ a^2 + t*b, b^4 + b^2 + c, c^2 + t*u ] > IsField(K); true > P<x,y,z> := PolynomialRing(K, 3);Some simple factorizations first, showing how the relations of the field cause some polynomials to factor.
> Factorization(x^2 + t); [ <x^2 + t, 1> ] > Factorization(x^2 + t*b); [ <x + a, 2> ] > Factorization(x^2 + t*u); [ <x + c, 2> ] > Factorization(x^2 + x + 1); [ <x^2 + x + 1, 1> ] > Factorization(x^2 + x + c); [ <x + b^2, 1>, <x + b^2 + 1, 1> ] > Factorization((x^2 + t*b)*(y^4 + y^2 + c)); [ <y + b, 2>, <y + b + 1, 2>, <x + a, 2> ]Now for some much bigger polynomials.
> f := (x*y+a)^2*(x^2 + a)^2*(x*y*z + a)*(x^2 + t); > f; x^9*y^3*z + a*x^8*y^2 + t*x^7*y^3*z + t*b*x^7*y*z + t*a*x^6*y^2 + t*a*b*x^6 + t*b*x^5*y^3*z + t^2*b*x^5*y*z + t*a*b*x^4*y^2 + t^2*a*b*x^4 + t^2*b*x^3*y^3*z + t^2*b^2*x^3*y*z + t^2*a*b*x^2*y^2 + t^2*a*b^2*x^2 + t^3*b^2*x*y*z + t^3*a*b^2 > g := (x*z^3 + t)^2*(x^2 + z + a)^2*(y^2*z + t)^2*(x^2*y + z)^3* > (x*z + 1)*((x*y)^4 + t); > g := (x*z^3 + t)^2*(x^2 + z + a)^2*(y^2*z + t)^2*(x^2*y + z)^3* > (x*z + 1)*((x*y)^4 + t*u); > g; x^17*y^11*z^9 + t^2*x^17*y^7*z^7 + x^16*y^11*z^8 + t^2*x^16*y^7*z^6 + t^2*x^15*y^11*z^3 + x^15*y^10*z^10 + t^4*x^15*y^7*z + t^2*x^15*y^6*z^8 + t^2*x^14*y^11*z^2 + x^14*y^10*z^9 + t^4*x^14*y^7 + t^2*x^14*y^6*z^7 + x^13*y^11*z^11 + t*b*x^13*y^11*z^9 + t^2*x^13*y^10*z^4 + x^13*y^9*z^11 + (t^2 + t*u)*x^13*y^7*z^9 + t^3*b*x^13*y^7*z^7 + t^4*x^13*y^6*z^2 + t^2*x^13*y^5*z^9 + t^3*u*x^13*y^3*z^7 + x^12*y^11*z^10 + t*b*x^12*y^11*z^8 + t^2*x^12*y^10*z^3 + x^12*y^9*z^10 + (t^2 + t*u)*x^12*y^7*z^8 + t^3*b*x^12*y^7*z^6 + t^4*x^12*y^6*z + t^2*x^12*y^5*z^8 + t^3*u*x^12*y^3*z^6 + t^2*x^11*y^11*z^5 + t^3*b*x^11*y^11*z^3 + x^11*y^10*z^12 + t*b*x^11*y^10*z^10 + t^2*x^11*y^9*z^5 + x^11*y^8*z^12 + (t^4 + t^3*u)*x^11*y^7*z^3 + t^5*b*x^11*y^7*z + (t^2 + t*u)*x^11*y^6*z^10 + t^3*b*x^11*y^6*z^8 + t^4*x^11*y^5*z^3 + t^2*x^11*y^4*z^10 + t^5*u*x^11*y^3*z + t^3*u*x^11*y^2*z^8 + t^2*x^10*y^11*z^4 + t^3*b*x^10*y^11*z^2 + x^10*y^10*z^11 + t*b*x^10*y^10*z^9 + t^2*x^10*y^9*z^4 + x^10*y^8*z^11 + (t^4 + t^3*u)*x^10*y^7*z^2 + t^5*b*x^10*y^7 + (t^2 + t*u)*x^10*y^6*z^9 + t^3*b*x^10*y^6*z^7 + t^4*x^10*y^5*z^2 + t^2*x^10*y^4*z^9 + t^5*u*x^10*y^3 + t^3*u*x^10*y^2*z^7 + t^2*x^9*y^10*z^6 + t^3*b*x^9*y^10*z^4 + x^9*y^9*z^13 + t*b*x^9*y^9*z^11 + t^2*x^9*y^8*z^6 + t*u*x^9*y^7*z^11 + t^2*u*b*x^9*y^7*z^9 + (t^4 + t^3*u)*x^9*y^6*z^4 + t^5*b*x^9*y^6*z^2 + (t^2 + t*u)*x^9*y^5*z^11 + t^3*b*x^9*y^5*z^9 + t^4*x^9*y^4*z^4 + t^3*u*x^9*y^3*z^9 + t^4*u*b*x^9*y^3*z^7 + t^5*u*x^9*y^2*z^2 + t^3*u*x^9*y*z^9 + t^2*x^8*y^10*z^5 + t^3*b*x^8*y^10*z^3 + x^8*y^9*z^12 + t*b*x^8*y^9*z^10 + t^2*x^8*y^8*z^5 + t*u*x^8*y^7*z^10 + t^2*u*b*x^8*y^7*z^8 + (t^4 + t^3*u)*x^8*y^6*z^3 + t^5*b*x^8*y^6*z + (t^2 + t*u)*x^8*y^5*z^10 + t^3*b*x^8*y^5*z^8 + t^4*x^8*y^4*z^3 + t^3*u*x^8*y^3*z^8 + t^4*u*b*x^8*y^3*z^6 + t^5*u*x^8*y^2*z + t^3*u*x^8*y*z^8 + t^2*x^7*y^9*z^7 + t^3*b*x^7*y^9*z^5 + x^7*y^8*z^14 + t*b*x^7*y^8*z^12 + t^3*u*x^7*y^7*z^5 + t^4*u*b*x^7*y^7*z^3 + t*u*x^7*y^6*z^12 + t^2*u*b*x^7*y^6*z^10 + (t^4 + t^3*u)*x^7*y^5*z^5 + t^5*b*x^7*y^5*z^3 + (t^2 + t*u)*x^7*y^4*z^12 + t^3*b*x^7*y^4*z^10 + t^5*u*x^7*y^3*z^3 + t^6*u*b*x^7*y^3*z + t^3*u*x^7*y^2*z^10 + t^4*u*b*x^7*y^2*z^8 + t^5*u*x^7*y*z^3 + t^3*u*x^7*z^10 + t^2*x^6*y^9*z^6 + t^3*b*x^6*y^9*z^4 + x^6*y^8*z^13 + t*b*x^6*y^8*z^11 + t^3*u*x^6*y^7*z^4 + t^4*u*b*x^6*y^7*z^2 + t*u*x^6*y^6*z^11 + t^2*u*b*x^6*y^6*z^9 + (t^4 + t^3*u)*x^6*y^5*z^4 + t^5*b*x^6*y^5*z^2 + (t^2 + t*u)*x^6*y^4*z^11 + t^3*b*x^6*y^4*z^9 + t^5*u*x^6*y^3*z^2 + t^6*u*b*x^6*y^3 + t^3*u*x^6*y^2*z^9 + t^4*u*b*x^6*y^2*z^7 + t^5*u*x^6*y*z^2 + t^3*u*x^6*z^9 + t^2*x^5*y^8*z^8 + t^3*b*x^5*y^8*z^6 + t^3*u*x^5*y^6*z^6 + t^4*u*b*x^5*y^6*z^4 + t*u*x^5*y^5*z^13 + t^2*u*b*x^5*y^5*z^11 + (t^4 + t^3*u)*x^5*y^4*z^6 + t^5*b*x^5*y^4*z^4 + t^5*u*x^5*y^2*z^4 + t^6*u*b*x^5*y^2*z^2 + t^3*u*x^5*y*z^11 + t^4*u*b*x^5*y*z^9 + t^5*u*x^5*z^4 + t^2*x^4*y^8*z^7 + t^3*b*x^4*y^8*z^5 + t^3*u*x^4*y^6*z^5 + t^4*u*b*x^4*y^6*z^3 + t*u*x^4*y^5*z^12 + t^2*u*b*x^4*y^5*z^10 + (t^4 + t^3*u)*x^4*y^4*z^5 + t^5*b*x^4*y^4*z^3 + t^5*u*x^4*y^2*z^3 + t^6*u*b*x^4*y^2*z + t^3*u*x^4*y*z^10 + t^4*u*b*x^4*y*z^8 + t^5*u*x^4*z^3 + t^3*u*x^3*y^5*z^7 + t^4*u*b*x^3*y^5*z^5 + t*u*x^3*y^4*z^14 + t^2*u*b*x^3*y^4*z^12 + t^5*u*x^3*y*z^5 + t^6*u*b*x^3*y*z^3 + t^3*u*x^3*z^12 + t^4*u*b*x^3*z^10 + t^3*u*x^2*y^5*z^6 + t^4*u*b*x^2*y^5*z^4 + t*u*x^2*y^4*z^13 + t^2*u*b*x^2*y^4*z^11 + t^5*u*x^2*y*z^4 + t^6*u*b*x^2*y*z^2 + t^3*u*x^2*z^11 + t^4*u*b*x^2*z^9 + t^3*u*x*y^4*z^8 + t^4*u*b*x*y^4*z^6 + t^5*u*x*z^6 + t^6*u*b*x*z^4 + t^3*u*y^4*z^7 + t^4*u*b*y^4*z^5 + t^5*u*z^5 + t^6*u*b*z^3 > time Factorization(f); [ <x*y + a, 2>, <x*y*z + a, 1>, <x^2 + t, 1>, <x^2 + a, 2> ] Time: 0.090 > time Factorization(g); [ <y^2*z + t, 2>, <x*z + 1, 1>, <x^2 + z + a, 2>, <x^2*z^6 + t^2, 1>, <x^2*y + z, 3>, <x^2*y^2 + c, 2> ] Time: 0.080 > h := f*g; > Degree(h, x); 26 > Degree(h, y); 14 > Degree(h, z); 15 > h; x^26*y^14*z^10 + t^2*x^26*y^10*z^8 + x^25*y^14*z^9 + [4089 terms] + t^7*u*a*b^3*y^4*z^5 + t^8*u*a*b^2*z^5 + t^9*u*a*b^3*z^3 > time Factorization(h); [ <y^2*z + t, 2>, <x*z + 1, 1>, <x*y*z + a, 1>, <x^2 + t, 1>, <x^2 + a, 2>, <x^2 + z + a, 2>, <x^2*z^6 + t^2, 1>, <x^2*y + z, 3>, <x^2*y^2 + c, 2>, <x^2*y^2 + t*b, 1> ] Time: 0.330
> p := 3; > F<t,u,v> := FunctionField(GF(p), 3); > K<a,b> := AffineAlgebra<F,a,b| a^3 + b^3 + t*u, b^6 + b^3 + u*v>; > IsField(K); true > P<x,y,z> := PolynomialRing(K, 3); > Factorization(x^3 + t); [ <x^3 + t, 1> ] > Factorization(x^3 + t*u); [ <x + 2*a + 2*b, 3> ] > Factorization(x^2 + x + u*v); [ <x + b^3 + 1, 1>, <x + 2*b^3, 1> ] > f := (x^2 + x + u*v)^3*(x^3 + t*u)*(y + t*u)^3; > f; x^9*y^3 + t^3*u^3*x^9 + (t*u + 1)*x^6*y^3 + (t^4*u^4 + t^3*u^3)*x^6 + (t*u + u^3*v^3)*x^3*y^3 + (t^4*u^4 + t^3*u^6*v^3)*x^3 + t*u^4*v^3*y^3 + t^4*u^7*v^3 > time Factorization(f); [ <y + t*u, 3>, <x + b^3 + 1, 3>, <x + 2*b^3, 3>, <x + 2*a + 2*b, 3> ] Time: 0.050 > g := (y^2 + y + u*v)^6*(z^3 + t*u)*(y + t*u + 1)^3; > g; y^15*z^3 + t*u*y^15 + t^3*u^3*y^12*z^3 + t^4*u^4*y^12 + (2*t^3*u^3 + 2*u^3*v^3)*y^9*z^3 + (2*t^4*u^4 + 2*t*u^4*v^3)*y^9 + (2*t^3*u^6*v^3 + t^3*u^3 + u^3*v^3 + 1)*y^6*z^3 + (2*t^4*u^7*v^3 + t^4*u^4 + t*u^4*v^3 + t*u)*y^6 + (2*t^3*u^6*v^3 + u^6*v^6 + 2*u^3*v^3)*y^3*z^3 + (2*t^4*u^7*v^3 + t*u^7*v^6 + 2*t*u^4*v^3)*y^3 + (t^3*u^9*v^6 + u^6*v^6)*z^3 + t^4*u^10*v^6 + t*u^7*v^6 > time Factorization(g); [ <z + 2*a + 2*b, 3>, <y + t*u + 1, 3>, <y + b^3 + 1, 6>, <y + 2*b^3, 6> ] Time: 0.060 > h := f*g; > h; x^9*y^18*z^3 + t*u*x^9*y^18 + 2*t^3*u^3*x^9*y^15*z^3 + 2*t^4*u^4*x^9*y^15 + (t^6*u^6 + 2*t^3*u^3 + 2*u^3*v^3)*x^9*y^12*z^3 + (t^7*u^7 + 2*t^4*u^4 + 2*t*u^4*v^3)*x^9*y^12 + (2*t^6*u^6 + t^3*u^6*v^3 + t^3*u^3 + u^3*v^3 + 1)*x^9*y^9*z^3 + (2*t^7*u^7 + t^4*u^7*v^3 + t^4*u^4 + t*u^4*v^3 + t*u)*x^9*y^9 + (2*t^6*u^9*v^3 + t^6*u^6 + t^3*u^3 + u^6*v^6 + 2*u^3*v^3)*x^9*y^6*z^3 + (2*t^7*u^10*v^3 + t^7*u^7 + t^4*u^4 + t*u^7*v^6 + 2*t*u^4*v^3)*x^9*y^6 + (2*t^6*u^9*v^3 + 2*t^3*u^9*v^6 + 2*t^3*u^6*v^3 + u^6*v^6)*x^9*y^3*z^3 + (2*t^7*u^10*v^3 + 2*t^4*u^10*v^6 + 2*t^4*u^7*v^3 + t*u^7*v^6)*x^9*y^3 + (t^6*u^12*v^6 + t^3*u^9*v^6)*x^9*z^3 + (t^7*u^13*v^6 + t^4*u^10*v^6)*x^9 + (t*u + 1)*x^6*y^18*z^3 + (t^2*u^2 + t*u)*x^6*y^18 + (2*t^4*u^4 + 2*t^3*u^3)*x^6*y^15*z^3 + (2*t^5*u^5 + 2*t^4*u^4)*x^6*y^15 + (t^7*u^7 + t^6*u^6 + 2*t^4*u^4 + 2*t^3*u^3 + 2*t*u^4*v^3 + 2*u^3*v^3)*x^6*y^12*z^3 + (t^8*u^8 + t^7*u^7 + 2*t^5*u^5 + 2*t^4*u^4 + 2*t^2*u^5*v^3 + 2*t*u^4*v^3)*x^6*y^12 + (2*t^7*u^7 + 2*t^6*u^6 + t^4*u^7*v^3 + t^4*u^4 + t^3*u^6*v^3 + t^3*u^3 + t*u^4*v^3 + t*u + u^3*v^3 + 1)*x^6*y^9*z^3 + (2*t^8*u^8 + 2*t^7*u^7 + t^5*u^8*v^3 + t^5*u^5 + t^4*u^7*v^3 + t^4*u^4 + t^2*u^5*v^3 + t^2*u^2 + t*u^4*v^3 + t*u)*x^6*y^9 + (2*t^7*u^10*v^3 + t^7*u^7 + 2*t^6*u^9*v^3 + t^6*u^6 + t^4*u^4 + t^3*u^3 + t*u^7*v^6 + 2*t*u^4*v^3 + u^6*v^6 + 2*u^3*v^3)*x^6*y^6*z^3 + (2*t^8*u^11*v^3 + t^8*u^8 + 2*t^7*u^10*v^3 + t^7*u^7 + t^5*u^5 + t^4*u^4 + t^2*u^8*v^6 + 2*t^2*u^5*v^3 + t*u^7*v^6 + 2*t*u^4*v^3)*x^6*y^6 + (2*t^7*u^10*v^3 + 2*t^6*u^9*v^3 + 2*t^4*u^10*v^6 + 2*t^4*u^7*v^3 + 2*t^3*u^9*v^6 + 2*t^3*u^6*v^3 + t*u^7*v^6 + u^6*v^6)*x^6*y^3*z^3 + (2*t^8*u^11*v^3 + 2*t^7*u^10*v^3 + 2*t^5*u^11*v^6 + 2*t^5*u^8*v^3 + 2*t^4*u^10*v^6 + 2*t^4*u^7*v^3 + t^2*u^8*v^6 + t*u^7*v^6)*x^6*y^3 + (t^7*u^13*v^6 + t^6*u^12*v^6 + t^4*u^10*v^6 + t^3*u^9*v^6)*x^6*z^3 + (t^8*u^14*v^6 + t^7*u^13*v^6 + t^5*u^11*v^6 + t^4*u^10*v^6)*x^6 + (t*u + u^3*v^3)*x^3*y^18*z^3 + (t^2*u^2 + t*u^4*v^3)*x^3*y^18 + (2*t^4*u^4 + 2*t^3*u^6*v^3)*x^3*y^15*z^3 + (2*t^5*u^5 + 2*t^4*u^7*v^3)*x^3*y^15 + (t^7*u^7 + t^6*u^9*v^3 + 2*t^4*u^4 + 2*t^3*u^6*v^3 + 2*t*u^4*v^3 + 2*u^6*v^6)*x^3*y^12*z^3 + (t^8*u^8 + t^7*u^10*v^3 + 2*t^5*u^5 + 2*t^4*u^7*v^3 + 2*t^2*u^5*v^3 + 2*t*u^7*v^6)*x^3*y^12 + (2*t^7*u^7 + 2*t^6*u^9*v^3 + t^4*u^7*v^3 + t^4*u^4 + t^3*u^9*v^6 + t^3*u^6*v^3 + t*u^4*v^3 + t*u + u^6*v^6 + u^3*v^3)*x^3*y^9*z^3 + (2*t^8*u^8 + 2*t^7*u^10*v^3 + t^5*u^8*v^3 + t^5*u^5 + t^4*u^10*v^6 + t^4*u^7*v^3 + t^2*u^5*v^3 + t^2*u^2 + t*u^7*v^6 + t*u^4*v^3)*x^3*y^9 + (2*t^7*u^10*v^3 + t^7*u^7 + 2*t^6*u^12*v^6 + t^6*u^9*v^3 + t^4*u^4 + t^3*u^6*v^3 + t*u^7*v^6 + 2*t*u^4*v^3 + u^9*v^9 + 2*u^6*v^6)*x^3*y^6*z^3 + (2*t^8*u^11*v^3 + t^8*u^8 + 2*t^7*u^13*v^6 + t^7*u^10*v^3 + t^5*u^5 + t^4*u^7*v^3 + t^2*u^8*v^6 + 2*t^2*u^5*v^3 + t*u^10*v^9 + 2*t*u^7*v^6)*x^3*y^6 + (2*t^7*u^10*v^3 + 2*t^6*u^12*v^6 + 2*t^4*u^10*v^6 + 2*t^4*u^7*v^3 + 2*t^3*u^12*v^9 + 2*t^3*u^9*v^6 + t*u^7*v^6 + u^9*v^9)*x^3*y^3*z^3 + (2*t^8*u^11*v^3 + 2*t^7*u^13*v^6 + 2*t^5*u^11*v^6 + 2*t^5*u^8*v^3 + 2*t^4*u^13*v^9 + 2*t^4*u^10*v^6 + t^2*u^8*v^6 + t*u^10*v^9)*x^3*y^3 + (t^7*u^13*v^6 + t^6*u^15*v^9 + t^4*u^10*v^6 + t^3*u^12*v^9)*x^3*z^3 + (t^8*u^14*v^6 + t^7*u^16*v^9 + t^5*u^11*v^6 + t^4*u^13*v^9)*x^3 + t*u^4*v^3*y^18*z^3 + t^2*u^5*v^3*y^18 + 2*t^4*u^7*v^3*y^15*z^3 + 2*t^5*u^8*v^3*y^15 + (t^7*u^10*v^3 + 2*t^4*u^7*v^3 + 2*t*u^7*v^6)*y^12*z^3 + (t^8*u^11*v^3 + 2*t^5*u^8*v^3 + 2*t^2*u^8*v^6)*y^12 + (2*t^7*u^10*v^3 + t^4*u^10*v^6 + t^4*u^7*v^3 + t*u^7*v^6 + t*u^4*v^3)*y^9*z^3 + (2*t^8*u^11*v^3 + t^5*u^11*v^6 + t^5*u^8*v^3 + t^2*u^8*v^6 + t^2*u^5*v^3)*y^9 + (2*t^7*u^13*v^6 + t^7*u^10*v^3 + t^4*u^7*v^3 + t*u^10*v^9 + 2*t*u^7*v^6)*y^6*z^3 + (2*t^8*u^14*v^6 + t^8*u^11*v^3 + t^5*u^8*v^3 + t^2*u^11*v^9 + 2*t^2*u^8*v^6)*y^6 + (2*t^7*u^13*v^6 + 2*t^4*u^13*v^9 + 2*t^4*u^10*v^6 + t*u^10*v^9)*y^3*z^3 + (2*t^8*u^14*v^6 + 2*t^5*u^14*v^9 + 2*t^5*u^11*v^6 + t^2*u^11*v^9)*y^3 + (t^7*u^16*v^9 + t^4*u^13*v^9)*z^3 + t^8*u^17*v^9 + t^5*u^14*v^9 > time Factorization(h); [ <z + 2*a + 2*b, 3>, <y + t*u, 3>, <y + t*u + 1, 3>, <y + b^3 + 1, 6>, <y + 2*b^3, 6>, <x + b^3 + 1, 3>, <x + 2*b^3, 3>, <x + 2*a + 2*b, 3> ] Time: 0.130