-
-
Notifications
You must be signed in to change notification settings - Fork 672
Closed
Milestone
Description
Right now to test if a Sage integer is prime it is faster to call prime_range
rather than .is_prime()
...
sage: timeit("bool(prime_range(121,122))", number=10000)
10000 loops, best of 3: 1.09 µs per loop
sage: timeit("bool(prime_range(1009,1010))", number=10000)
10000 loops, best of 3: 1.2 µs per loop
versus
sage: timeit("121.is_prime()", number=10000)
10000 loops, best of 3: 5.3 µs per loop
sage: timeit("1009.is_prime()", number=10000)
10000 loops, best of 3: 4.19 µs per loop
The patch does some tiny modifications in integer.pyx
and we get
sage: timeit("121.is_prime()", number=10000)
10000 loops, best of 3: 812 ns per loop
sage: timeit("1009.is_prime()", number=10000)
10000 loops, best of 3: 730 ns per loop
We also modify is_prime_power()
to return False
for 1 and raise an error for non-integral rationals like 1/2
.
See also this sage-devel discussion.
Depends on #16997
CC: @nathanncohen
Component: number theory
Author: Vincent Delecroix, Jeroen Demeyer
Branch: 1f8abd9
Reviewer: Jeroen Demeyer, Vincent Delecroix
Issue created by migration from https://trac.sagemath.org/ticket/16878