/*
 * Project Euler
 * Problem 45: Triangular, 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.
 */

#include <iostream>
#include <cmath>

int main() {

    // 1. Count doubled numbers to save division by 2
    // 2. Tn ~ n^2,   Pn ~ 3n^2,    Hn ~ 4n^2

    for (long t = 286; true; t++)
    {
        long triangle = t*t + t;

        long p = (int)sqrt(triangle / 3); // Lower estimation of  p
        long pentagonal;
        while ((pentagonal = 3*p*p - p) < triangle) {
            p++;
        }
        if (pentagonal > triangle) {
            continue;
        }

        long h = (long)sqrt(triangle / 4); // Lower estimation of  h
        long hexagonal;
        while ((hexagonal = 4*h*h - 2*h) < triangle) {
            h++;
        }
        if (hexagonal > triangle) {
            continue;
        }

        std::cout << triangle  / 2 << " = T" << t << " = P" << p << " = H" << h << std::endl;
        break;
    }
    return 0;
}