[3.13] Simplify and speed-up an itertools recipe (gh-127848) (gh-127998)

This commit is contained in:
Miss Islington (bot) 2024-12-16 18:26:58 +01:00 committed by GitHub
parent 231c93923d
commit 28e684b330
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1015,7 +1015,7 @@ The following recipes have a more mathematical flavor:
.. testcode::
def powerset(iterable):
"powerset([1,2,3]) → () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
# powerset([1,2,3]) → () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
@ -1104,11 +1104,6 @@ The following recipes have a more mathematical flavor:
data[p*p : n : p+p] = bytes(len(range(p*p, n, p+p)))
yield from iter_index(data, 1, start=3)
def is_prime(n):
"Return True if n is prime."
# is_prime(1_000_000_000_000_403) → True
return n > 1 and all(n % p for p in sieve(math.isqrt(n) + 1))
def factor(n):
"Prime factors of n."
# factor(99) → 3 3 11
@ -1123,6 +1118,11 @@ The following recipes have a more mathematical flavor:
if n > 1:
yield n
def is_prime(n):
"Return True if n is prime."
# is_prime(1_000_000_000_000_403) → True
return n > 1 and next(factor(n)) == n
def totient(n):
"Count of natural numbers up to n that are coprime to n."
# https://mathworld.wolfram.com/TotientFunction.html