Pentagonal numbers are generated by the formula, Pn=n(3n1)/2. The first ten pentagonal numbers are:

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, …

It can be seen that P4 + P7 = 22 + 70 = 92 = P8. However, their difference, 70 22 = 48, is not pentagonal.

Find the pair of pentagonal numbers, Pj and Pk, for which their sum and difference is pentagonal and D = |Pk Pj| is minimised; what is the value of D?

最小性を示すのが難しい、というか良く分からない。でも、答えはあっているらしい。

たぶん差分とかとって考えると最小だってことが分かるんだよ。多分。

import Data.Set
penta = [n*(3*n-1)`div`2|n<-[1..10000]]
isPenta = (`member` fromList penta)
p044 = [a-b|a<-penta,b<-takeWhile(<a)penta,isPenta(a-b),isPenta(a+b)]
main = print.head$p044