### The Problem

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}=3125If 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 Solution

Unless you're working in assembly language, this problem is pretty trivial.
It almost seems *designed* for a functional language with a focus on
pipelines. Fortunately for us, we're working with one of those.

Here's the solution in all its glory:

- Start by generating a sequence of all possible
`a,b`

pairs. - For each of those, get a
^{b} - Filter out the duplicates
- Count what we have left

```
seq {
for a in 2I..100I do
for b in 2..100 -> a,b
}
|> Seq.map (fun (a,b) -> pown a b)
|> Seq.distinct
|> Seq.length
```

Other Posts in This Series