# coding=utf-8

"""
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.
"""

import geometry
import utils



def main():
  # tris = [n for n in geometry.triangle_numbers(50000)]
  pents = [n for n in geometry.pent_numbers(50000)]
  hexs = [n for n in geometry.hex_numbers(50000)]

  for tri_n in geometry.triangle_numbers():
    if utils.list_has(pents, tri_n) and utils.list_has(hexs, tri_n): # fast binary-search
    # if tri_n in pents and tri_n in hexs:               # old slow approach
      if tri_n > 40755:
        print tri_n
        break

if __name__ == '__main__':
  main()