Project Euler(45)
Posted on Tuesday, January 27th, 2009 at 9:45 pm by Universe QueenProblem 45:
Triangle, pentagonal, and hexagonal numbers are generated by the following formulae:
Triangle T_(n)=n(n+1)/2 1, 3, 6, 10, 15, …
Pentagonal P_(n)=n(3n−1)/2 1, 5, 12, 22, 35, …
Hexagonal H_(n)=n(2n−1) 1, 6, 15, 28, 45, …It can be verified that T_(285) = P_(165) = H_(143) = 40755.
Find the next triangle number that is also pentagonal and hexagonal.
Answer: 1533776805
Implementation in Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import java.math.*; import java.util.*; public class Euler45 { public static void main(String[] args) { String result = null; Set setPentagonal = new TreeSet(); Set setHexagonal = new TreeSet(); for( int i=166; i<99999; i++ ) { BigInteger tmp1 = new BigInteger( String.valueOf(i) ); BigInteger tmp2 = tmp1.multiply( new BigInteger( String.valueOf(3) ) ); tmp2 = tmp2.subtract( new BigInteger( String.valueOf(1) ) ); tmp1 = tmp1.multiply( tmp2 ); tmp1 = tmp1.divide( new BigInteger( String.valueOf(2) ) ); setPentagonal.add( tmp1.toString() ); } for( int i=144; i<99999; i++ ) { BigInteger tmp1 = new BigInteger( String.valueOf(i) ); BigInteger tmp2 = tmp1.multiply( new BigInteger( String.valueOf(2) ) ); tmp2 = tmp2.subtract( new BigInteger( String.valueOf(1) ) ); tmp1 = tmp1.multiply( tmp2 ); setHexagonal.add( tmp1.toString() ); } for( int i=285; i<Integer.MAX_VALUE; i++ ) { BigInteger tmp1 = new BigInteger( String.valueOf(i) ); tmp1 = tmp1.multiply( tmp1.add( new BigInteger( String.valueOf(1) ) ) ); tmp1 = tmp1.divide( new BigInteger( String.valueOf(2) ) ); String tmp = tmp1.toString(); if( setPentagonal.contains(tmp) && setHexagonal.contains(tmp) ) { result = tmp; break; } } System.out.println( result ); } } |
