Project Euler #119 : Digit power sum
If you don't need to print out results in order, you can inverse the logic and compute power value first, and check if the result equals to sum of digits. It's super fast:

using System;

public class Program
{
    private const int MaxCount = 25;

    public static void Main(string[] args)
    {
        var c = 1;
        for (var i = 2; i &lt; 100; i++)
        {
            for (var j = 2; j &lt; 1000; j++)
            {
                var pow = (long)Math.Pow(j, i);
                var sum = SumOfDigits(pow);
                if (sum != j)
                {
                    continue;
                }
                Console.WriteLine($"{c}: {pow} = {sum} ^ {i}");
                c++;
                if (c &gt; MaxCount)
                {
                    break;
                }
            }
            if (c &gt; MaxCount)
            {
                break;
            }
        }
        Console.ReadLine();
    }

    private static long SumOfDigits(long value)
    {
        long sum = 0;
        while (value != 0)
        {
            sum = sum + (value % 10); 
            value = value / 10; 
        }

        return sum;
    }
}


Please note loop limit values are arbitrary, large enough to satisfy requirement of 25 results.