| 1 | initial version |
This updates the answer by @achrzesz, as coeffs is no longer available.
The polynomial method of a number field element gives the associated
polynomial. The list method of that polynomial gives its coefficients.
Beware that polynomials also have a coefficients method but by default
it only gives the nonzero coefficients, so one should prefer list.
Define the number field:
sage: p = 127
sage: x = polygen(GF(p))
sage: K.<t> = GF(p^2, modulus=x^2 + 1)
Find the coefficients of some elements expressed as polynomials in the number field generator:
sage: a = 364*t + 214
sage: a
110*t + 87
sage: a.polynomial()
110*t + 87
sage: a.polynomial().list()
[87, 110]
sage: b = 16*t
sage: b
16*t
sage: b.polynomial()
16*t
sage: b.polynomial().list()
[0, 16]
sage: c = K(16)
sage: c
sage: c.polynomial()
16
sage: c.polynomial().list()
[16]
The coefficients method is error-prone:
sage: a.polynomial().coefficients() # also works here
[87, 110]
sage: b.polynomial().coefficients()
[16]
sage: c.polynomial().coefficients()
[16]
unless one is specific about including zeros:
sage: b.polynomial().coefficients(sparse=False)
[0, 16]
sage: c.polynomial().coefficients(sparse=False)
[16]
Another option is to go through the integer representation:
sage: ZZ(a.integer_representation()).digits(base=p)
[87, 110]
sage: ZZ(b.integer_representation()).digits(base=p)
[0, 16]
sage: ZZ(c.integer_representation()).digits(base=p)
[16]
There, one can also pad with zeros so that the number of "p-adic digits" matches the degree:
sage: ZZ(c.integer_representation()).digits(base=p, padto=2)
[16, 0]
| 2 | No.2 Revision |
This updates the answer by @achrzesz, as coeffs is no longer available.
The polynomial method of a number field element gives the associated
polynomial. The list method of that polynomial gives its coefficients.
Beware that polynomials also have a coefficients method but by default
it only gives the nonzero coefficients, so one should prefer list.
Define the number field:
sage: p = 127
sage: x = polygen(GF(p))
sage: K.<t> = GF(p^2, modulus=x^2 + 1)
Find the coefficients of some elements expressed as polynomials in the number field generator:
sage: a = 364*t + 214
sage: a
110*t + 87
sage: a.polynomial()
110*t + 87
sage: a.polynomial().list()
[87, 110]
sage: b = 16*t
sage: b
16*t
sage: b.polynomial()
16*t
sage: b.polynomial().list()
[0, 16]
sage: c = K(16)
sage: c
sage: c.polynomial()
16
sage: c.polynomial().list()
[16]
The coefficients method is error-prone:
sage: a.polynomial().coefficients() # also works here
[87, 110]
sage: b.polynomial().coefficients()
[16]
sage: c.polynomial().coefficients()
[16]
unless one is specific about including zeros:
sage: b.polynomial().coefficients(sparse=False)
[0, 16]
sage: c.polynomial().coefficients(sparse=False)
[16]
Another option is to go through the integer representation:
sage: ZZ(a.integer_representation()).digits(base=p)
[87, 110]
sage: ZZ(b.integer_representation()).digits(base=p)
[0, 16]
sage: ZZ(c.integer_representation()).digits(base=p)
[16]
There, one can also pad with zeros so that the number of "p-adic digits" matches the degree:
sage: ZZ(c.integer_representation()).digits(base=p, padto=2)
[16, 0]
I answered the question with p = 127 as @achrzesz did,
but the value of p the original poster had in mind was
likely greater than 364.
When trying the above with p = 367, the integer_representation
method is not available. Making it available independent of the
finite field implementation is now tracked at
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.