factors.py
View source code here on GitHub!
Includes
1from functools import reduce
2from itertools import combinations
3from operator import mul
4from typing import Iterator, Set
5
6from .primes import prime_factors
7
8
9def proper_divisors(num: int) -> Iterator[int]:
10 factors = tuple(prime_factors(num))
11 seen: Set[int] = set()
12 yield 1
13 for x in range(1, len(factors)):
14 for combo in combinations(factors, x):
15 ret = reduce(mul, combo, 1)
16 if ret not in seen:
17 yield ret
18 seen.add(ret)
19 seen.clear()