@@ -901,12 +901,14 @@ which incur interpreter overhead.
901
901
"Prime factors of n."
902
902
# factor(99) --> 3 3 11
903
903
for prime in sieve(math.isqrt(n) + 1):
904
- while n >= prime :
904
+ while True :
905
905
quotient, remainder = divmod(n, prime)
906
906
if remainder:
907
907
break
908
908
yield prime
909
909
n = quotient
910
+ if n == 1:
911
+ return
910
912
if n >= 2:
911
913
yield n
912
914
@@ -1286,13 +1288,21 @@ which incur interpreter overhead.
1286
1288
[3, 3]
1287
1289
>>> list (factor(10 ))
1288
1290
[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
1290
1294
[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 ))
1292
1302
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 ))
1294
1304
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 ))
1296
1306
True
1297
1307
1298
1308
>>> list (flatten([(' a' , ' b' ), (), (' c' , ' d' , ' e' ), (' f' ,), (' g' , ' h' , ' i' )]))
0 commit comments