Ticket #3658: trac-3658.patch

File trac-3658.patch, 2.3 KB (added by craigcitro, 14 years ago)
  • sage/functions/transcendental.py

    # HG changeset patch
    # User Craig Citro <craigcitro@gmail.com>
    # Date 1232720155 28800
    # Node ID 12007b5253cfe3bc550dfb80ec4e3177da5576a3
    # Parent  daa90769ff1093afc4e69d5331032b7b26d8c10f
    Fix trac #3658: incorrect results from pari primepi.
    
    diff -r daa90769ff10 -r 12007b5253cf sage/functions/transcendental.py
    a b  
    329329        0
    330330        sage: prime_pi(-10)
    331331        0
     332        sage: prime_pi(500509)
     333        41581
    332334
    333335    The prime_pi function also has a special plotting method, so it plots
    334336    quickly and perfectly as a step function.
     
    340342    def __call__(self, x):
    341343        if x < 2:
    342344            return ZZ(0)
    343         try:
    344             return ZZ(pari(x).primepi())
    345         except PariError:
    346             from sage.rings.integer import Integer
    347             pari.init_primes(pari(x)+Integer(1))
    348             return ZZ(pari(x).primepi())
     345        return ZZ(pari(x).primepi())
    349346
    350347    def plot(self, xmin=0, xmax=100, *args, **kwds):
    351348        primes = prime_range(xmin, xmax+2)
  • sage/libs/pari/gen.pyx

    diff -r daa90769ff10 -r 12007b5253cf sage/libs/pari/gen.pyx
    a b  
    43294329            0
    43304330            sage: pari(-15).primepi()
    43314331            0
    4332         """
    4333         _sig_on
     4332            sage: pari(500509).primepi()
     4333            41581
     4334        """
     4335        global num_primes
     4336        _sig_on
     4337        if self > num_primes:
     4338            P.init_primes(self + 10)
    43344339        if signe(self.g) != 1:
    43354340            return P(0)
    43364341        return P.new_gen(primepi(self.g))
     
    73867391
    73877392    ##############################################
    73887393
     7394    def _primelimit(self):
     7395        """
     7396        Return the number of primes already computed
     7397        in this Pari instance.
     7398
     7399        EXAMPLES:
     7400            sage: pari._primelimit()
     7401            500519
     7402            sage: pari.init_primes(600000)
     7403            sage: pari._primelimit()
     7404            600000
     7405        """
     7406        global num_primes
     7407        from sage.rings.all import ZZ
     7408        return ZZ(num_primes)
     7409
    73897410    def prime_list(self, long n):
    73907411        """
    73917412        prime_list(n): returns list of the first n primes