Basic arithmetic with C integers¶
- class sage.rings.fast_arith.arith_llong¶
Bases:
object- rational_recon_longlong(a, m)[source]¶
Rational reconstruction of a modulo m.
EXAMPLES:
sage: from sage.rings.fast_arith import arith_llong sage: arith_llong().rational_recon_longlong(1234567, 2147483629) (-23606, 22613)
>>> from sage.all import * >>> from sage.rings.fast_arith import arith_llong >>> arith_llong().rational_recon_longlong(Integer(1234567), Integer(2147483629)) (-23606, 22613)
from sage.rings.fast_arith import arith_llong arith_llong().rational_recon_longlong(1234567, 2147483629)
- sage.rings.fast_arith.prime_range(start, stop=None, step=None, algorithm=None, py_ints=False)[source]¶
Return a list of all primes between
startandstop - 1, inclusive (or betweenstopandstart + 1ifstepis negative).If the second argument is omitted, this returns the primes up to the first argument.
See also
INPUT:
start– integer; lower bound (default: 1)stop– integer; upper boundstep– integer orNone(default:None); if notNone, the function returns only primes that are congruent tostartmodulostep. Ifstepis negative, then the returned list will be decreasing.algorithm– string (default:None), one of:None: Use algorithm'pari_primes'ifstop<= 436273009 (approximately 4.36E8). Otherwise use algorithm'pari_isprime'.'pari_primes': Use PARI’s pari:primes function to generate all primes from 2 to stop. This is fast but may crash if there is insufficient memory. Raises an error ifstop> 436273009.'pari_isprime': Wrapper forlist(primes(start, stop)). Each (odd) integer in the specified range is tested for primality by applying PARI’s pari:isprime function. This is slower but will work for much larger input.
py_ints– boolean (default:False); return Python ints rather than Sage Integers (faster). Ignored unless algorithm'pari_primes'is being used.
EXAMPLES:
sage: prime_range(10) [2, 3, 5, 7] sage: prime_range(7) [2, 3, 5] sage: prime_range(2000, 2020) [2003, 2011, 2017] sage: prime_range(2, 2) [] sage: prime_range(2, 3) [2] sage: prime_range(5, 10) [5, 7] sage: prime_range(11, 100, 10) [11, 31, 41, 61, 71] sage: prime_range(-100, 10, "pari_isprime") [2, 3, 5, 7] sage: prime_range(2, 2, algorithm='pari_isprime') [] sage: prime_range(10**16, 10**16+100, "pari_isprime") [10000000000000061, 10000000000000069, 10000000000000079, 10000000000000099] sage: prime_range(10**30, 10**30+100, "pari_isprime") [1000000000000000000000000000057, 1000000000000000000000000000099] sage: type(prime_range(8)[0]) <class 'sage.rings.integer.Integer'> sage: type(prime_range(8, algorithm='pari_isprime')[0]) <class 'sage.rings.integer.Integer'>
>>> from sage.all import * >>> prime_range(Integer(10)) [2, 3, 5, 7] >>> prime_range(Integer(7)) [2, 3, 5] >>> prime_range(Integer(2000), Integer(2020)) [2003, 2011, 2017] >>> prime_range(Integer(2), Integer(2)) [] >>> prime_range(Integer(2), Integer(3)) [2] >>> prime_range(Integer(5), Integer(10)) [5, 7] >>> prime_range(Integer(11), Integer(100), Integer(10)) [11, 31, 41, 61, 71] >>> prime_range(-Integer(100), Integer(10), "pari_isprime") [2, 3, 5, 7] >>> prime_range(Integer(2), Integer(2), algorithm='pari_isprime') [] >>> prime_range(Integer(10)**Integer(16), Integer(10)**Integer(16)+Integer(100), "pari_isprime") [10000000000000061, 10000000000000069, 10000000000000079, 10000000000000099] >>> prime_range(Integer(10)**Integer(30), Integer(10)**Integer(30)+Integer(100), "pari_isprime") [1000000000000000000000000000057, 1000000000000000000000000000099] >>> type(prime_range(Integer(8))[Integer(0)]) <class 'sage.rings.integer.Integer'> >>> type(prime_range(Integer(8), algorithm='pari_isprime')[Integer(0)]) <class 'sage.rings.integer.Integer'>
prime_range(10) prime_range(7) prime_range(2000, 2020) prime_range(2, 2) prime_range(2, 3) prime_range(5, 10) prime_range(11, 100, 10) prime_range(-100, 10, "pari_isprime") prime_range(2, 2, algorithm='pari_isprime') prime_range(10**16, 10**16+100, "pari_isprime") prime_range(10**30, 10**30+100, "pari_isprime") type(prime_range(8)[0]) type(prime_range(8, algorithm='pari_isprime')[0])
Note
startandstopshould be integers, but real numbers will also be accepted as input. In this case, they will be rounded to nearby integers start* and stop*, so the output will be the primes between start* and stop* - 1, which may not be exactly the same as the primes betweenstartandstop - 1.AUTHORS:
William Stein (original version)
Craig Citro (rewrote for massive speedup)
Kevin Stueve (added primes iterator option) 2010-10-16
Robert Bradshaw (speedup using Pari prime table, py_ints option)
Vincent Macri (added step option)