def triangle_nums(): sum = 0 n = 1 while 1: sum += n yield sum n += 1 def factors(num): """ smallest1, biggest1, smallest2, biggest2 """ n = 2 while n*n <= num: if num % n == 0: yield n yield num / n n += 1 def main(): for n in triangle_nums(): if len(list(factors(n))) > 500: return n print main()