@@ -862,12 +862,14 @@ which incur interpreter overhead.
862
862
"Prime factors of n."
863
863
# factor(99) --> 3 3 11
864
864
for prime in sieve(math.isqrt(n) + 1):
865
- while n >= prime :
865
+ while True :
866
866
quotient, remainder = divmod(n, prime)
867
867
if remainder:
868
868
break
869
869
yield prime
870
870
n = quotient
871
+ if n == 1:
872
+ return
871
873
if n >= 2:
872
874
yield n
873
875
@@ -1256,13 +1258,21 @@ which incur interpreter overhead.
1256
1258
[3, 3]
1257
1259
>>> list (factor(10 ))
1258
1260
[2, 5]
1259
- >>> list (factor(999953 * 999983 ))
1261
+ >>> list (factor(128_884_753_939 )) # large prime
1262
+ [128884753939]
1263
+ >>> list (factor(999953 * 999983 )) # large semiprime
1260
1264
[999953, 999983]
1261
- >>> all (math.prod(factor(n)) == n for n in range (1 , 1000 ))
1265
+ >>> list (factor(6 ** 20 )) == [2 ] * 20 + [3 ] * 20 # large power
1266
+ True
1267
+ >>> list (factor(909_909_090_909 )) # large multiterm composite
1268
+ [3, 3, 7, 13, 13, 751, 113797]
1269
+ >>> math.prod([3 , 3 , 7 , 13 , 13 , 751 , 113797 ])
1270
+ 909909090909
1271
+ >>> all (math.prod(factor(n)) == n for n in range (1 , 2_000 ))
1262
1272
True
1263
- >>> all (set (factor(n)) <= set (sieve(n+ 1 )) for n in range (1 , 1000 ))
1273
+ >>> all (set (factor(n)) <= set (sieve(n+ 1 )) for n in range (2_000 ))
1264
1274
True
1265
- >>> all (list (factor(n)) == sorted (factor(n)) for n in range (1 , 1000 ))
1275
+ >>> all (list (factor(n)) == sorted (factor(n)) for n in range (2_000 ))
1266
1276
True
1267
1277
1268
1278
>>> list (flatten([(' a' , ' b' ), (), (' c' , ' d' , ' e' ), (' f' ,), (' g' , ' h' , ' i' )]))
0 commit comments