Не смог точно определиться, в этот ли раздел стоит помещать тему или в математический. Так что извиняюсь, если что, перенесите.
Сразу скажу, что речь не пойдёт о создании нового алгоритма возведения в степень, а хочется просто научится вычислять функцию
- минимальное количество умножений, достаточное для возведения числа в a-тую степень.
Есть, конечно, всем известный алгоритм бинарного возведения, и он асимптотически оптимален, кажеться. Но для числа 27, к примеру, он даёт 7 умножений при любой реализации. А если представить
как
, то можно управиться за 6 умножений. Точно так же для
можно возводить бинарным алгоритмом за 11 умножений. А можно представить как
, после чего в пятую степень возводить бинарным алгоритмом. Получится 9 действий.
Кажеться, что вычисление
для данного
- очень трудоёмкая задача, вряд ли полиномиальная. Но если рассмотреть, например, задачу нахождения всех
для целых
? Как использовать предыдущие вычисления чтобы найти действительно минимальное количество перемножений?
Это что-то вроде задачи перебора разбиений, но намного сложнее, потом что пусть, делая последнее перемножение, мы получаем
. Тогда
. Но мы можем получить и меньше
перемножений, оставив последний шаг тем же, то есть получая сначала
и
. Ведь по ходу вычисления
мы можем получить какие-то промежуточные степени, которые потом можно использовать для вычисления
, избавившись от каких-то перемножений.
То есть просто перебрать пары
для
не получится, нужно анализировать, какие степени вычисляются по ходу вычисления
и
, смотреть, как можно провязать вычисление двух степеней... Это уже сумасшедшее время.
Что касается математики, то максимум, что мне удалось вывести на коленке за один вечер - это
, самое элементарное. Дальше пока ничего.
Решил написать в раздел олимпиадного программирования, потому что интересует именно алгоритм. Повторюсь, не какой-то супермощный алгоритм возведения в степень (бинарного вполне хватает асимптотически
), а алгоритм точного вычисления
.
Ну, и ещё я как ни увижу сложное задачу, думаю, не NP-ли она и не имеет ли связи со знаменитыми кликами, булевыми функциями и прочими...
-- 06.03.2015, 15:50 --Что касается математики, то максимум, что мне удалось вывести на коленке за один вечер - это
, самое элементарное. Дальше пока ничего.
Пока не нашёл примера, где лучшим результатом была бы другая схема, то есть где последним перемножением было бы
, но при вычислении
использовалась вычисленная при определнии
степень
, но такая, чтобы
не делил ни
ни
.