Monday, August 15, 2011

Problem 45

prob45.cc Problem 45
Filename: prob45.cc
// Problem 45

// 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(3n1)/2	 	1, 5, 12, 22, 35, ...
// Hexagonal	 	Hn=n(2n1)	 	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 <math.h>
using namespace std;


//inline bool isTriangle(const unsigned long long Tn)
//{
//	return ceil((-1 + sqrt(1+8*Tn))/2) == floor((-1 + sqrt(1+8*Tn))/2);
//}

inline bool isPentagonal(const unsigned long long Pn)
{
  return ceil((1 + sqrt(1+24*Pn))/6) == floor((1 + sqrt(1+24*Pn))/6);
}

inline bool isHexagonal(const unsigned long long Hn)
{
  return ceil((1 + sqrt(1+8*Hn))/4) == floor((1 + sqrt(1+8*Hn))/4);
}

inline unsigned long long T(const unsigned int n)
{
  return n*(n+1)/2;
}


int main()
{
  cout << T(285) << endl;
  for(unsigned int i=286; ; ++i)
    {
      if(isPentagonal(T(i)) && isHexagonal(T(i)))
	{
	  cout << T(i) << endl;
	  return 0;
	}
    }
  
  return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1

No comments:

Post a Comment