Project Euler Problem 29: Distinct Powers

The source code for this problem can be found here.

Problem Statement

Consider all integer combinations of \(a^b\) for \(2 \le a \le 5\) and \(2 \le b \le 5\):

\[\begin{split}&2^2=4, &2^3=8, &2^4=16, &2^5=32 \\ &3^2=9, &3^3=27, &3^4=81, &3^5=243 \\ &4^2=16, &4^3=64, &4^4=256, &4^5=1024 \\ &5^2=25, &5^3=125, &5^4=625, &5^5=3125 \\\end{split}\]

If they are then placed in numerical order, with any repeats removed, we get the following sequence of \(15\) distinct terms:

\[4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125\]

How many distinct terms are in the sequence generated by \(a^b\) for \(2 \le a \le 100\) and \(2 \le b \le 100\)?

Solution Discussion

Nothing sophisticated here, explicitly perform the computation.

Solution Implementation

from itertools import product


def solve():
    """ Compute the answer to Project Euler's problem #29 """
    upper_bound = 100
    terms = set()
    for a, b in product(range(2, upper_bound + 1), repeat=2):
        terms.add(a ** b)
    answer = len(terms)
    return answer


expected_answer = 9183
solutions.problem29.solve()

Compute the answer to Project Euler’s problem #29