Ask Your Question
1

Polynomial in $GF(p^2)$

asked 2014-08-25 10:03:34 +0200

Blackadder gravatar image

updated 2014-08-25 10:04:02 +0200

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 flag offensive close merge delete

2 Answers

Sort by » oldest newest most voted
2

answered 2014-08-25 12:38:57 +0200

tmonteil gravatar image

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()[0]*variable for coeff,variable in f)
sage: h = sum(coeff.polynomial()[1]*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
edit flag offensive delete link more

Comments

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

Blackadder gravatar imageBlackadder ( 2014-08-26 02:28:33 +0200 )edit
0

answered 2014-08-25 12:26:18 +0200

FrédéricC gravatar image

Something like that:

sage: f.map_coefficients(lambda p:p.polynomial().coefficients()[0])
3*e1*e2 + 4*e2^2 - 4*e1 + 3
sage: f.map_coefficients(lambda p:p.polynomial().coefficients()[1])
-4*e1*e2 + 2*e2^2 + 2*e1 - 5
edit flag offensive delete link more

Comments

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()[0])`` should work.

tmonteil gravatar imagetmonteil ( 2014-08-25 12:55:43 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2014-08-25 10:03:34 +0200

Seen: 449 times

Last updated: Aug 25 '14