8000 Restore early-out to factor(). Strengthen tests. (GH-100591) · python/cpython@c4c5790 · GitHub
[go: up one dir, main page]

Skip to content

Commit c4c5790

Browse files
authored
Restore early-out to factor(). Strengthen tests. (GH-100591)
1 parent 9eca723 commit c4c5790

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

Doc/library/itertools.rst

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -901,12 +901,14 @@ which incur interpreter overhead.
901901
"Prime factors of n."
902902
# factor(99) --> 3 3 11
903903
for prime in sieve(math.isqrt(n) + 1):
904-
while n >= prime:
904+
while True:
905905
quotient, remainder = divmod(n, prime)
906906
if remainder:
907907
break
908908
yield prime
909909
n = quotient
910+
if n == 1:
911+
return
910912
if n >= 2:
911913
yield n
912914

@@ -1286,13 +1288,21 @@ which incur interpreter overhead.
12861288
[3, 3]
12871289
>>> list(factor(10))
12881290
[2, 5]
1289-
>>> list(factor(999953*999983))
1291+
>>> list(factor(128_884_753_939)) # large prime
1292+
[128884753939]
1293+
>>> list(factor(999953 * 999983)) # large semiprime
12901294
[999953, 999983]
1291-
>>> all(math.prod(factor(n)) == n for n in range(1, 1000))
1295+
>>> list(factor(6 ** 20)) == [2] * 20 + [3] * 20 # large power
1296+
True
1297+
>>> list(factor(909_909_090_909)) # large multiterm composite
1298+
[3, 3, 7, 13, 13, 751, 113797]
1299+
>>> math.prod([3, 3, 7, 13, 13, 751, 113797])
1300+
909909090909
1301+
>>> all(math.prod(factor(n)) == n for n in range(1, 2_000))
12921302
True
1293-
>>> all(set(factor(n)) <= set(sieve(n+1)) for n in range(1, 1000))
1303+
>>> all(set(factor(n)) <= set(sieve(n+1)) for n in range(2_000))
12941304
True
1295-
>>> all(list(factor(n)) == sorted(factor(n)) for n in range(1, 1000))
1305+
>>> all(list(factor(n)) == sorted(factor(n)) for n in range(2_000))
12961306
True
12971307

12981308
>>> list(flatten([('a', 'b'), (), ('c', 'd', 'e'), ('f',), ('g', 'h', 'i')]))

0 commit comments

Comments
 (0)
0