关于数学:如何计算 x^y mod z?

How to calculate x^y mod z?

本问题已经有最佳答案,请猛点这里访问。

我想知道如何计算 x^y mod z。 x 和 y 非常大(不适合 64 位整数),而 z 将适合 64 位整数。
有一件事不要给出答案,例如 x^y mod z 与 (x mod z)^y mod z 相同。


这是标准方法,伪代码:

1
2
3
4
5
6
7
8
9
10
function powerMod(b, e, m)
    x := 1
    while e > 0
        if e % 2 == 1
            x := (b * x) % m
            e := e - 1
        else
            b := (b * b) % m
            e := e / 2
    return x

该算法称为平方求幂或平方乘法。


如果您使用的是 Java,则将 x、y 和 z 转换为 BigInteger。

1
2
3
4
BigInteger xBI = new BigInteger(x);
BigInteger yBI = new BigInteger(y);
BigInteger zBI = new BigInteger(z);
BigInteger answer = xBI.modPow(yBI,zBI);