我有一个计算a^b mod m
的问题,是
可能使用模幂运算,但我遇到的问题是我的b值非常大,b > 2^63 - 1
所以我们可以修改模幂运算代码
function modular_pow(base, exponent, modulus) result := 1 while exponent > 0 if (exponent mod 2 == 1): result := (result * base) mod modulus exponent := exponent >> 1 base = (base * base) mod modulus return result
以适应如此大的b
或a^b mod m
等于(a^(b mod m)) mod m
答案 0 :(得分:0)
a^b mod m
= a^(b mod phi(m)) mod m
是正确的,其中phi(m)是Euler totient function
您的代码也是正确的(如果类型足够长以表示所有值)
您也可以合并两种方法