Modular Exponentiation - 模幂运算
问题
给定正整数,求:
简单算法
按照次方运算的原理,初始化,重复次:
即为所求,该算法的时间复杂度为。
二进制算法
根据二进制可知,任何正整数都可以用个的次方和来表示:
其中是正整数中1的数量,要么为要么为,且。因此可以转换为:
因此模幂运算转换为:
计算每个元素,若则结果必然为,不必计算,若则需要次乘法,即时间复杂度为(其中)。
该算法的时间复杂度为。
求正整数中所有为1的bit位的方法,与本书第三章DataStructure中FenwickTree一节使用的方法一样,不再赘述。
快速求幂算法
快速求幂算法基于以下公式:
该算法的时间复杂度为。