Как эффективно рассчитать a^k mod m

Как я могу эффективно вычислить ak по модулю m, где a,k,m — очень большие числа, а k может быть до 109 или больше, a может быть до 10 6.

Здесь a простое число, но k и m могут не быть простыми числами.

Является ли мой единственный вариант вычислением a1 mod m, a2 mod m, a4 mod m и т. д. на основе двоичного представления k или есть ли простой способ уменьшить k до меньшего числа?


person SwagUser    schedule 18.07.2020    source источник
comment
Существует множество различных алгоритмов и подходов для модульного возведения в степень. Статья WP также содержит ссылки на некоторые реализации.   -  person Jeroen Mostert    schedule 18.07.2020


Ответы (1)


Эта проблема аналогична пропуску вперед для линейных конгруэнтных генераторов случайных чисел. Для этого есть формула

Браун, Форрест, Б.: Генерация случайных чисел с произвольным шагом. Аргоннская национальная лаборатория, 1994 г. https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/anl-rn-arb-stride.pdf

person Christian Fries    schedule 18.07.2020