如何计算x ^ y mod z?

时间:2015-01-25 17:00:37

标签: math modulo modular-arithmetic

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

2 个答案:

答案 0 :(得分:3)

这是标准方法,伪代码:

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

该算法通过平方或 square和multiply 方法称为取幂。

答案 1 :(得分:2)

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

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