euler/e012.py
Correl Roush cb0cd33bfa Completed problem 012
git-svn-id: file:///srv/svn/euler@37 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
2010-04-12 15:53:16 +00:00

57 lines
No EOL
1.2 KiB
Python

from e003 import pfactor
from p054.poker import unique_combinations
def triangle(n):
x = 0
for i in range(n + 1):
x = x + i
return x
def badfactor(n):
f = []
for i in range(n, 0, -1):
if n % i == 0:
f.append(i)
return f
def product(l):
p = 1
for n in l:
p = p * n
return p
def factor(n):
primes = pfactor(n)
factors = [1, n]
pow = {}
for p in primes:
if p not in pow.keys():
pow[p] = 0
pow[p] = pow[p] + 1
factors.append(p**pow[p])
for p in [f for f in factors if f > 1]:
f = n / p
if f not in factors:
factors.append(n / p)
combos = unique_combinations(factors, 2)
for c in combos:
f = product(c)
if f < n and n % f == 0 and f not in factors:
factors.append(f)
if n not in factors:
factors.append(n)
return sorted(set(factors))
if __name__ == '__main__':
i = 1
while True:
i = i + 1
t = triangle(i)
f = factor(t)
print 'Checking triangle', i, t, len(f)
if len(f) > 500:
break
print 'Triangle number {0} has {1} factors ({2})'.format(t, len(f), f)