71 lines
1.3 KiB
Python
71 lines
1.3 KiB
Python
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))
|