def get_divisors(number): ps = prime_factors(number) divisors = set(ps) divisors.add(1) l = 2 while l <= len(ps): for c in itertools.combinations(ps, l): divisors.add(reduce(lambda x, y: x * y, c)) l += 1 return divisors
def smallest_multiple(min_val, max_val): min_val = max(min_val, 2) factor_counts = dict() for i in range(min_val, max_val+1): i_factors = prime_factors(i) for factor in i_factors: i_factor_count = i_factors.count(factor) if factor in factor_counts: factor_count = max(factor_counts[factor], i_factor_count) else: factor_count = i_factor_count factor_counts[factor] = factor_count product = 1 for factor, count in factor_counts.iteritems(): product = product * (factor ** count) return product
def count_divisors(number): num_ps = len(prime_factors(number)) num_divisors = 1 for k in range(1, num_ps+1): num_divisors += num_combinations(num_ps, k) return num_divisors