Pentagonal numbers are generated by the formula, `P_n=n(3n−1)/2`

. The first ten pentagonal numbers are:

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

It can be seen that `P_4 + P_7 = 22 + 70 = 92 = P_8`

. However, their difference, 70 − 22 = 48, is not pentagonal.

Find the pair of pentagonal numbers, `P_j`

and `P_k`

, for which their sum and difference are pentagonal and `D = |P_k − P_j|`

is minimised; what is the value of `D`

?

```
In [1]:
```import math
class Solution:
def __init__(self):
pass
def is_pentagonal(self, x):
# See test for pentagonal numbers
# https://en.wikipedia.org/wiki/Pentagonal_number
n = math.sqrt(24 * x + 1) + 1
return n/6 == n//6
def p(self, n):
return n * (3*n - 1) // 2
def each_jk(self, limit):
for gap in range(1,limit):
for j in range(1,limit+gap):
k = j+gap
yield (j,k)
def search(self, limit):
for (j,k) in self.each_jk(limit):
P_j = self.p(j)
P_k = self.p(k)
D = P_k - P_j
S = P_k + P_j
if self.is_pentagonal(D) and self.is_pentagonal(S):
return (j,k,D)

```
In [2]:
```s = Solution()
ans = s.search(10000)

```
In [3]:
```print("Answer:", ans[2])
print("Where j=%d and k=%d"%(ans[0], ans[1]))

```
```

```
In [ ]:
```