"""After 40755, what is the next triangle number that is also pentagonal and hexagonal? Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: Triangle Tn=n(n+1)/2 1, 3, 6, 10, 15, ... Pentagonal Pn=n(3n-1)/2 1, 5, 12, 22, 35, ... Hexagonal Hn=n(2n-1) 1, 6, 15, 28, 45, ... It can be verified that T285 = P165 = H143 = 40755. Find the next triangle number that is also pentagonal and hexagonal. """ def triangle_generator(start = 0): n = start while True: n = n + 1 yield n * (n + 1) / 2 def pentagonal_generator(start = 0): n = start while True: n = n + 1 yield n * (3 * n - 1) / 2 def hexagonal_generator(start = 0): n = start while True: n = n + 1 yield n * (2 * n - 1) MIN = 40755 def main(): pent_count = 0 tri_count = 0 for hex in hexagonal_generator(): if hex <= MIN: continue # Catch up the other generators for pent in pentagonal_generator(pent_count): pent_count = pent_count + 1 if pent >= hex: break if pent > hex: continue for tri in triangle_generator(tri_count): tri_count = tri_count + 1 if tri >= hex: break if tri > hex: continue print 'Next number is:', hex break if __name__ == '__main__': main()