Project Euler – Problem 63 Solution

Problem

The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, 134217728=89, is a ninth power.

How many n-digit positive integers exist which are also an nth power?

Solution

let naturalNumbers = Seq.unfold (fun state -> Some(state, state+1)) 1

// define function to find the number of n digit numbers which are also nth power
let f n =
    naturalNumbers
    |> Seq.map (fun n' -> pown (bigint(n')) n)
    |> Seq.skipWhile (fun n' -> n'.ToString().Length < n)
    |> Seq.takeWhile (fun n' -> n'.ToString().Length = n)
    |> Seq.length

let answer =
    naturalNumbers
    |> Seq.map f
    |> Seq.takeWhile (fun l -> l > 0)
    |> Seq.sum