ikatakos
9/17/2018 - 2:51 PM

PrimeFactorize - Python3

素因数分解

def prime_factorize(n):
    """
    :return: dict{prime: exponent}
    """
    f = defaultdict(lambda: 0)
    f[2] = len(bin(n & -n)) - 3
    i = 3
    k = n >> f[2]
    while 1 < k and i * i <= k:
        while True:
            d, m = divmod(k, i)
            if m == 0:
                f[i] += 1
                k = d
            else:
                break
        i += 2
    if k > 1:
      f[k] = 1
    return f