# Polynomial in $GF(p^2)$

Hello, I have a finite field $K=GF(p^2)$ and the polynomial ring $R=K[x,y]$. They are defined as such

p = 11;
K = GF(p^2,'t');
K.inject_variables();
R.<e1,e2> = K[];
f = (-4*t + 3)*e1*e2 + (2*t + 4)*e2^2 + (2*t - 4)*e1 + (-5*t + 3)


I would like to know if it is possible to group/order all the terms with respect to t instead of e1 and e2. That is, I would like to see

g = -4*e1*e2 + 2*e2^2 + 2*e1 - 5;
h = 3*e1*e2 + 4e2^2 + 4*e1 + 3;


such that

g*t + h == f


Thanks for your help!

edit retag close merge delete

Sort by » oldest newest most voted

You can split the components of f, which is iterable:

sage: list(f)
[(7*t + 3, e1*e2), (2*t + 4, e2^2), (2*t + 7, e1), (6*t + 3, 1)]


Given an element of K, you can get its components with respect to 1 and t:

sage: z = 7*t + 3
sage: z.polynomial()
7*t + 3
sage: list(z.polynomial())
[3, 7]


With both ingredients, you can recombine f the way you want. For example:

sage: g = sum(coeff.polynomial()*variable for coeff,variable in f)
sage: h = sum(coeff.polynomial()*variable for coeff,variable in f)
sage: g + t*h
(-4*t + 3)*e1*e2 + (2*t + 4)*e2^2 + (2*t - 4)*e1 + (-5*t + 3)
sage: g + t*h == f
True

more

Thank you so much. SAGE would not be as good as it is without people like you. Something like that:

sage: f.map_coefficients(lambda p:p.polynomial().coefficients())
3*e1*e2 + 4*e2^2 - 4*e1 + 3
sage: f.map_coefficients(lambda p:p.polynomial().coefficients())
-4*e1*e2 + 2*e2^2 + 2*e1 - 5

more

It seems we answered simultaneously. The problem with the coefficients() method is that it only considers the nonzero coefficients. Try with f = 4*e1 -5*t  to see what happens. That said, f.map_coefficients(lambda p:p.polynomial()) should work.