@@ -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