Если вы не ищете оптимальности, просто достаточно хорошей работы, то есть куча эвристик, которые вы можете использовать.Например, попробуйте разложить n, используя все следующие
n = a^k + b
для k = 2, 3, ..., log n
, и выберите тот, который имеет наименьшее значение, скажем, a + b
.Вы можете вычислить a
и b
, используя a = floor(n^(1/k))
и b = n-a^k
.Затем наберите a
и b
.
Конечно, для поиска хорошего сжатия используется только возведение в степень и сложение.Если вы также разрешите вычитание, используйте a=round(n^(1/k))
вместо этого, и пусть b
будет отрицательным.
Также допустимое умножение делает его немного сложнее, потому что вам, вероятно, нужно будет учитывать n
.