1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-- 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.
-- 30s is kinda okay (not really)
main = do
let triangle = [n * (n + 1) `div` 2 | n <- [1..]]
pentagonal = [n * (3 * n - 1) `div` 2 | n <- [1..]]
hexagonal = [n * (2 * n - 1) | n <- [1..]]
isPentagonal n = n `elem` takeWhile (<= n) pentagonal
isHexagonal n = n `elem` takeWhile (<= n) hexagonal
print (take 2 [t | t <- drop 284 triangle, isPentagonal t, isHexagonal t])
|