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 [ ]: