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