Univariate Polynomials over GF(2) via NTL’s GF2X.¶
AUTHOR: - Martin Albrecht (2008-10) initial implementation
-
sage.rings.polynomial.polynomial_gf2x.
GF2X_BuildIrred_list
(n)¶ Return the list of coefficients of the lexicographically smallest irreducible polynomial of degree \(n\) over the field of 2 elements.
EXAMPLES:
sage: from sage.rings.polynomial.polynomial_gf2x import GF2X_BuildIrred_list sage: GF2X_BuildIrred_list(2) [1, 1, 1] sage: GF2X_BuildIrred_list(3) [1, 1, 0, 1] sage: GF2X_BuildIrred_list(4) [1, 1, 0, 0, 1] sage: GF(2)['x'](GF2X_BuildIrred_list(33)) x^33 + x^6 + x^3 + x + 1
-
sage.rings.polynomial.polynomial_gf2x.
GF2X_BuildRandomIrred_list
(n)¶ Return the list of coefficients of an irreducible polynomial of degree \(n\) of minimal weight over the field of 2 elements.
EXAMPLES:
sage: from sage.rings.polynomial.polynomial_gf2x import GF2X_BuildRandomIrred_list sage: GF2X_BuildRandomIrred_list(2) [1, 1, 1] sage: GF2X_BuildRandomIrred_list(3) in [[1, 1, 0, 1], [1, 0, 1, 1]] True
-
sage.rings.polynomial.polynomial_gf2x.
GF2X_BuildSparseIrred_list
(n)¶ Return the list of coefficients of an irreducible polynomial of degree \(n\) of minimal weight over the field of 2 elements.
EXAMPLES:
sage: from sage.rings.polynomial.polynomial_gf2x import GF2X_BuildIrred_list, GF2X_BuildSparseIrred_list sage: all([GF2X_BuildSparseIrred_list(n) == GF2X_BuildIrred_list(n) ....: for n in range(1,33)]) True sage: GF(2)['x'](GF2X_BuildSparseIrred_list(33)) x^33 + x^10 + 1
-
class
sage.rings.polynomial.polynomial_gf2x.
Polynomial_GF2X
¶ Bases:
sage.rings.polynomial.polynomial_gf2x.Polynomial_template
Univariate Polynomials over GF(2) via NTL’s GF2X.
EXAMPLES:
sage: P.<x> = GF(2)[] sage: x^3 + x^2 + 1 x^3 + x^2 + 1
-
is_irreducible
()¶ Return whether this polynomial is irreducible over \(\GF{2}\).`
EXAMPLES:
sage: R.<x> = GF(2)[] sage: (x^2 + 1).is_irreducible() False sage: (x^3 + x + 1).is_irreducible() True
Test that caching works:
sage: R.<x> = GF(2)[] sage: f = x^2 + 1 sage: f.is_irreducible() False sage: f.is_irreducible.cache False
-
modular_composition
(g, h, algorithm=None)¶ Compute \(f(g) \pmod h\).
Both implementations use Brent-Kung’s Algorithm 2.1 (Fast Algorithms for Manipulation of Formal Power Series, JACM 1978).
INPUT:
g
– a polynomialh
– a polynomialalgorithm
– either ‘native’ or ‘ntl’ (default: ‘native’)
EXAMPLES:
sage: P.<x> = GF(2)[] sage: r = 279 sage: f = x^r + x +1 sage: g = x^r sage: g.modular_composition(g, f) == g(g) % f True sage: P.<x> = GF(2)[] sage: f = x^29 + x^24 + x^22 + x^21 + x^20 + x^16 + x^15 + x^14 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^2 sage: g = x^31 + x^30 + x^28 + x^26 + x^24 + x^21 + x^19 + x^18 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1 sage: h = x^30 + x^28 + x^26 + x^25 + x^24 + x^22 + x^21 + x^18 + x^17 + x^15 + x^13 + x^12 + x^11 + x^10 + x^9 + x^4 sage: f.modular_composition(g,h) == f(g) % h True
AUTHORS:
- Paul Zimmermann (2008-10) initial implementation
- Martin Albrecht (2008-10) performance improvements
-
-
class
sage.rings.polynomial.polynomial_gf2x.
Polynomial_template
¶ Bases:
sage.rings.polynomial.polynomial_element.Polynomial
Template for interfacing to external C / C++ libraries for implementations of polynomials.
AUTHORS:
- Robert Bradshaw (2008-10): original idea for templating
- Martin Albrecht (2008-10): initial implementation
This file implements a simple templating engine for linking univariate polynomials to their C/C++ library implementations. It requires a ‘linkage’ file which implements the
celement_
functions (seesage.libs.ntl.ntl_GF2X_linkage
for an example). Both parts are then plugged together by inclusion of the linkage file when inheriting from this class. Seesage.rings.polynomial.polynomial_gf2x
for an example.We illustrate the generic glueing using univariate polynomials over \(\mathop{\mathrm{GF}}(2)\).
Note
Implementations using this template MUST implement coercion from base ring elements and
get_unsafe()
. SeePolynomial_GF2X
for an example.-
degree
()¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: x.degree() 1 sage: P(1).degree() 0 sage: P(0).degree() -1
-
gcd
(other)¶ Return the greatest common divisor of self and other.
EXAMPLES:
sage: P.<x> = GF(2)[] sage: f = x*(x+1) sage: f.gcd(x+1) x + 1 sage: f.gcd(x^2) x
-
get_cparent
()¶
-
is_gen
()¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: x.is_gen() True sage: (x+1).is_gen() False
-
is_one
()¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: P(1).is_one() True
-
is_zero
()¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: x.is_zero() False
-
list
(copy=True)¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: x.list() [0, 1] sage: list(x) [0, 1]
-
quo_rem
(right)¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: f = x^2 + x + 1 sage: f.quo_rem(x + 1) (x, 1)
-
shift
(n)¶ EXAMPLES:
sage: P.<x> = GF(2)[] sage: f = x^3 + x^2 + 1 sage: f.shift(1) x^4 + x^3 + x sage: f.shift(-1) x^2 + x
-
truncate
(n)¶ Returns this polynomial mod \(x^n\).
EXAMPLES:
sage: R.<x> =GF(2)[] sage: f = sum(x^n for n in range(10)); f x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1 sage: f.truncate(6) x^5 + x^4 + x^3 + x^2 + x + 1
If the precision is higher than the degree of the polynomial then the polynomial itself is returned:
sage: f.truncate(10) is f True
-
xgcd
(other)¶ Computes extended gcd of self and other.
EXAMPLES:
sage: P.<x> = GF(7)[] sage: f = x*(x+1) sage: f.xgcd(x+1) (x + 1, 0, 1) sage: f.xgcd(x^2) (x, 1, 6)
-
sage.rings.polynomial.polynomial_gf2x.
make_element
(parent, args)¶