权力模数

时间:2013-05-05 12:38:04

标签: language-agnostic

我有一个计算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

是否正确?

1 个答案:

答案 0 :(得分:0)

a^b mod m = a^(b mod phi(m)) mod m是正确的,其中phi(m)是Euler totient function

您的代码也是正确的(如果类型足够长以表示所有值)

您也可以合并两种方法