Ticket #6025: trac-6025.patch

File trac-6025.patch, 2.7 KB (added by craigcitro, 11 years ago)
  • sage/libs/pari/gen.pyx

    # HG changeset patch
    # User Craig Citro <craigcitro@gmail.com>
    # Date 1242174040 25200
    # Node ID acc0bad8a9c16c47e046068f108c7f3ba14cbb86
    # Parent  afdb31255fa7ef00695358e297180b537e74dc8b
    Fix trac #6025: The only solution is the final solution.
    
    diff -r afdb31255fa7 -r acc0bad8a9c1 sage/libs/pari/gen.pyx
    a b  
    89048904                    k = k + 1
    89058905        return A
    89068906
    8907     def finitefield_init(self, p, long n, var=-1):
    8908         """
    8909         finitefield_init(p, long n, var="x"): Return a polynomial f(x) so
    8910         that the extension of F_p of degree n is k = F_p[x]/(f).
    8911         Moreover, the element x (mod f) of k is a generator for the
    8912         multiplicative group of k.
    8913        
    8914         INPUT:
    8915        
    8916        
    8917         -  ``p`` - int, a prime number
    8918        
    8919         -  ``n`` - int, positive integer
    8920        
    8921         -  ``var`` - str, default to "x", but could be any pari
    8922            variable.
    8923        
    8924        
    8925         OUTPUT:
    8926        
    8927        
    8928         -  ``pari polynomial mod p`` - defines field
    8929        
    8930        
    8931         EXAMPLES::
    8932        
    8933             sage: pari.finitefield_init(97,1)
    8934             Mod(1, 97)*x + Mod(92, 97)
    8935        
    8936         These computations use pseudo-random numbers, so we set the seed
    8937         for reproducible testing.
    8938        
    8939         ::
    8940        
    8941             sage: set_random_seed(0)
    8942        
    8943         ::
    8944        
    8945             sage: pari.finitefield_init(7,2)
    8946             Mod(1, 7)*x^2 + Mod(5, 7)*x + Mod(3, 7)
    8947        
    8948         ::
    8949        
    8950             sage: pari.finitefield_init(2,3)
    8951             Mod(1, 2)*x^3 + Mod(1, 2)*x^2 + Mod(1, 2)   # 32-bit
    8952             Mod(1, 2)*x^3 + Mod(1, 2)*x + Mod(1, 2)     # 64-bit
    8953         """
    8954         cdef randstate rstate = current_randstate()
    8955         rstate.set_seed_pari()
    8956 
    8957         cdef gen _p, _f2, s
    8958         cdef int err
    8959         cdef long x
    8960         cdef GEN v, g
    8961         _p = self(int(p))
    8962         if n < 1:
    8963             raise ArithmeticError, "Degree n (=%s) must be at least 1."%n
    8964         if _p < 2 or not _p.isprime():
    8965             raise ArithmeticError, "Prime p (=%s) must be prime."%_p
    8966         x = self.get_var(var)
    8967         if n == 1:
    8968             _sig_on
    8969             return self.new_gen(ffinit(_p.g, n, x)) - _p.znprimroot()
    8970         _sig_on   
    8971         f = self.new_gen(ffinit(_p.g, n, x))
    8972         _f2 = f.lift()
    8973         _sig_on
    8974         g = FpXQ_gener(_f2.g, _p.g)
    8975         s = self.new_gen(g)*self.ONE.Mod(p)
    8976         return s.Mod(f).charpoly(var)
    89778907
    89788908##############################################
    89798909# Used in integer factorization -- must be done