(a^b)%m
在 C/C++中,如何计算b
不适合 64 位的位置?换句话说,有没有一种方法可以使用b%m
而不是计算上述值b
?
O(log(b))
是否有任何算法可以按时间或时间计算上述结果O(log(b%m))
?
(a^b)%m
在 C/C++中,如何计算b
不适合 64 位的位置?换句话说,有没有一种方法可以使用b%m
而不是计算上述值b
?
O(log(b))
是否有任何算法可以按时间或时间计算上述结果O(log(b%m))
?
根据欧拉定理,如果a
和m
互质:
ab mod m = ab mod phi(m) mod m
所以如果b
很大,您可以使用该值b % phi(m)
而不是b
. phi(m)
是欧拉的总函数,如果您知道 的素数分解,就可以很容易地计算出m
。
一旦你b
以这种方式减少了 的值,就可以使用Exponentiation by squareing来计算 中的模幂O(log (b % phi(m)))
。