Я был бы склонен использовать совершенно другой подход.
Сначала создайте итератор, который перечисляет все простые числа вплоть до квадратного корня максимального размера.Итак, 2, 3, 5, 7, 11 ...
ОБНОВЛЕНИЕ: НИКАКОГО НЕ ЖДИТЕ, ЧТО НЕ РАБОТАЕТ.Это, например, не дает 36 в качестве идеальной степени.
Позвольте мне пересмотреть.
Создайте итератор, который перечисляет все числа от 2 до квадратного корня максимального размера.
Затем создайте итератор, который перечисляет все совершенные полномочия определенного данного числа вплоть до максимального размера.Это 2 2 , 2 3 , 2 4 , ...
Теперь объедините два итератора с запросом select-many, так что вы генерируете: 2 2 , 2 3 , 2 4 , ... 3 2 , 3 3 , 3 4 , ..., 4 2 , 4 3 , 4 4 , ...
Создайте хеш-набор из полученного запроса, чтобы сформировать объединение всех совершенных степеней, меньших, чем максимальный размер всех чисел, вплоть до квадратного корня из максимального размера.
Размер результирующего набора хэшей - это число, которое вы ищете.