Add more recipe tests. Make the factor recipe a bit faster and clearer. (GH-106817)

This commit is contained in:
Raymond Hettinger 2023-07-16 21:37:07 -05:00 committed by GitHub
parent 48956cc60e
commit babb22da5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1049,11 +1049,10 @@ The following recipes have a more mathematical flavor:
# factor(1_000_000_000_000_403) --> 1000000000000403 # factor(1_000_000_000_000_403) --> 1000000000000403
for prime in sieve(math.isqrt(n) + 1): for prime in sieve(math.isqrt(n) + 1):
while True: while True:
quotient, remainder = divmod(n, prime) if n % prime:
if remainder:
break break
yield prime yield prime
n = quotient n //= prime
if n == 1: if n == 1:
return return
if n > 1: if n > 1:
@ -1354,6 +1353,12 @@ The following recipes have a more mathematical flavor:
>>> set(sieve(10_000)).isdisjoint(carmichael) >>> set(sieve(10_000)).isdisjoint(carmichael)
True True
>>> list(factor(99)) # Code example 1
[3, 3, 11]
>>> list(factor(1_000_000_000_000_007)) # Code example 2
[47, 59, 360620266859]
>>> list(factor(1_000_000_000_000_403)) # Code example 3
[1000000000000403]
>>> list(factor(0)) >>> list(factor(0))
[] []
>>> list(factor(1)) >>> list(factor(1))