def solve(N): result = 0 n = 1 size_prev_divisors = 1 while(True): n += 1 size_divisors = len(divisors_of(n)) if size_divisors*size_prev_divisors >= N: if len(divisors_of(n*(n-1)/2)) >= N: result = n*(n-1)/2 break size_prev_divisors = size_divisors print("The value of the first triangle number to have over %(N)s divisors is %(result)d" % vars())
def sum_proper_divisors(num): sum = 0 for f in divisors_of(num): sum += f #remove num form the sum of factors sum -= num return sum