def __init__(self, p, modulus, name=None): """ Create a finite field of characteristic `p` defined by the polynomial ``modulus``, with distinguished generator called ``name``. EXAMPLE:: sage: from sage.rings.finite_rings.finite_field_pari_ffelt import FiniteField_pari_ffelt sage: R.<x> = PolynomialRing(GF(3)) sage: k = FiniteField_pari_ffelt(3, x^2 + 2*x + 2, 'a'); k Finite Field in a of size 3^2 """ n = modulus.degree() if n < 2: raise ValueError("the degree must be at least 2") FiniteField.__init__(self, base=GF(p), names=name, normalize=True) self._modulus = modulus self._degree = n self._kwargs = {} self._gen_pari = modulus._pari_with_name(self._names[0]).ffgen() self._zero_element = self.element_class(self, 0) self._one_element = self.element_class(self, 1) self._gen = self.element_class(self, self._gen_pari)
def __init__(self, p, modulus, name=None): """ Create a finite field of characteristic `p` defined by the polynomial ``modulus``, with distinguished generator called ``name``. EXAMPLE:: sage: from sage.rings.finite_rings.finite_field_pari_ffelt import FiniteField_pari_ffelt sage: R.<x> = PolynomialRing(GF(3)) sage: k = FiniteField_pari_ffelt(3, x^2 + 2*x + 2, 'a'); k Finite Field in a of size 3^2 """ import constructor from sage.libs.pari.all import pari from sage.rings.integer import Integer from sage.structure.proof.all import arithmetic proof = arithmetic() p = Integer(p) if ((p < 2) or (proof and not p.is_prime()) or (not proof and not p.is_pseudoprime())): raise ArithmeticError("p must be a prime number") Fp = constructor.FiniteField(p) if name is None: name = modulus.variable_name() FiniteField.__init__(self, base=Fp, names=name, normalize=True) modulus = self.polynomial_ring()(modulus) n = modulus.degree() if n < 2: raise ValueError("the degree must be at least 2") self._modulus = modulus self._degree = n self._card = p ** n self._kwargs = {} self._gen_pari = pari(modulus).ffgen() self._zero_element = self.element_class(self, 0) self._one_element = self.element_class(self, 1) self._gen = self.element_class(self, self._gen_pari)
def __init__(self, p, modulus, name=None): """ Create a finite field of characteristic `p` defined by the polynomial ``modulus``, with distinguished generator called ``name``. EXAMPLE:: sage: from sage.rings.finite_rings.finite_field_pari_ffelt import FiniteField_pari_ffelt sage: R.<x> = PolynomialRing(GF(3)) sage: k = FiniteField_pari_ffelt(3, x^2 + 2*x + 2, 'a'); k Finite Field in a of size 3^2 """ import constructor from sage.libs.pari.all import pari from sage.rings.integer import Integer from sage.structure.proof.all import arithmetic proof = arithmetic() p = Integer(p) if ((p < 2) or (proof and not p.is_prime()) or (not proof and not p.is_pseudoprime())): raise ArithmeticError("p must be a prime number") Fp = constructor.FiniteField(p) if name is None: name = modulus.variable_name() FiniteField.__init__(self, base=Fp, names=name, normalize=True) modulus = self.polynomial_ring()(modulus) n = modulus.degree() if n < 2: raise ValueError("the degree must be at least 2") self._modulus = modulus self._degree = n self._card = p**n self._kwargs = {} self._gen_pari = pari(modulus).ffgen() self._zero_element = self.element_class(self, 0) self._one_element = self.element_class(self, 1) self._gen = self.element_class(self, self._gen_pari)