#### Problem 29: Distinct Powers

Consider all integer combinations of *a*^{b} for 2 ≤ *a* ≤ 5 and 2 ≤ *b* ≤ 5:

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

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 ≤*a* ≤ 100 and 2 ≤ *b* ≤ 100?

#### The Catch

How to store found terms and filter out duplicates so that all terms are distinct.

#### The Light

In mathematics, a set is a collection of distinct objects. Use Java's TreeSet class to store a collection of distinct elements and Math class for exponent operation. There is no need to sort the set because all the problem is asking for is the number of distinct elements, or the set's size.

#### The Code

import java.util.*; public class Problem29 { public static void main(String[] args) { TreeSet unique = new TreeSet(); for(double a = 2; a <= 100.0; a += 1.0) { for(double b = 2; b <= 100.0; b += 1.0) { double tmp = Math.pow(a,b); unique.add(tmp); } } System.out.println(unique.size()); } }