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.


In [ ]:
let max = 90000UL

let triangle n = (n * (n+1UL)) / 2UL
let pentagonal n = (n * ((3UL*n)-1UL)) / 2UL
let hexagonal n = (n * ((2UL*n)-1UL))

let triangles = [ 0UL..max ] |> List.map triangle 
let pentagons = [ 0UL..max ] |> List.map pentagonal |> Set.ofList
let hexagons = [ 0UL..max ] |> List.map hexagonal |> Set.ofList

triangles
|> List.filter (fun n -> pentagons.Contains(n))
|> List.filter (fun n -> hexagons.Contains(n))
|> List.map string

In [ ]: