project-euler/0012.py
2018-03-28 10:36:35 +02:00

59 lines
1.1 KiB
Python

from collections import Counter
from functools import reduce
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 find_divisers(num):
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
for i in range(1, 100000):
result = reduce(lambda x,y: x + y, list(range(1, i + 1)))
# divisers = find_divisers(result)
factors = find_prime_factors(result)
total_count = 1
for factor, count in Counter(factors).items():
total_count *= count + 1
if (total_count >= 500):
print(i)
print(result)
print(total_count)
break