Project Euler Problem 044

# Statement

Pentagonal numbers are generated by the formula, $P_n = \frac {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 is pentagonal
and $D = |P_k - P_j|$ is minimised; what is the value of D?

# Solution

The solution is a brute-force approach with limited number of possibilities.

from itertools import combinations

if __name__ == '__main__':
pentag_list = [n * (3 * n - 1) // 2 for n in range(1, 5000)]
setp = set(pentag_list)
pares = [tupla for tupla in combinations(pentag_list, 2) if abs(tupla[0] - tupla[1]) in setp]
for tupla in pares:
suma = tupla[1] + tupla[0]
while pentag_list[-1] < suma:
n = len(pentag_list) + 1
pentag_list.append(n * (3 * n -1) / 2)
if suma in pentag_list:
print("The result is:", abs(tupla[0] - tupla[1]))