from collections import Counter from functools import reduce def sum_proper_divisors (nbr): proper_divisors = divisors(nbr)[0:-1] return reduce(lambda x, y: x + y, proper_divisors) def divisors(num): result = [] def recurse(tuples, product = 1): factor, count = tuples[0] for i in range(0, count + 1): if (i != 0): product = product * factor if (len(tuples) > 1): recurse(tuples[1:], product) else: result.append(product) factors = find_prime_factors(num) recurse(list(Counter(factors).items())) result.sort() return result def find_largest_prime_factor(n): prime_factor = 1 factors.append(prime_factor) print('appended') i = 2 while i <= n / i: if n % i == 0: factors.append(i) prime_factor = i n = int(n / i) else: i += 1 if prime_factor < n: prime_factor = n return prime_factor def find_prime_factors(n): factors = [] i = 2 while i <= n / i: if n % i == 0: factors.append(i) n = int(n / i) else: i += 1 factors.append(n) return factors def factorial(n): return reduce(lambda x, y: x * y, range(1, n + 1))