Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个问题,a^b mod m可以使用模幂计算,但我遇到的问题是我拥有的 b 值非常大,b > 2^63 - 1所以我们可以修改模幂代码吗
a^b mod m
b > 2^63 - 1
函数模块_pow(基数,指数,模数) 结果:= 1 而指数 > 0 如果(指数模 2 == 1): 结果 := (result * base) mod 模数 指数 := 指数 >> 1 基数 = (基数 * 基数) mod 模数 返回结果
容纳这么大的b
b
还是a^b mod m等于(a^(b mod m)) mod m?
(a^(b mod m)) mod m
a^b mod m=是正确的a^(b mod phi(m)) mod m,其中 phi(m) 是欧拉函数
a^(b mod phi(m)) mod m
您的代码也是正确的(如果类型足够长以表示所有值)
您也可以结合两种方法