project-euler/util.py
2018-03-29 13:50:00 +02:00

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))