factors.py

View source code here on GitHub!

Includes

python.src.lib.factors.proper_divisors(num: int) Iterator[int]
 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()

Tags: python-iterator, divisor-count, divisibility