在Go中的bigInt包中是否有pow方法

时间:2015-05-03 08:26:24

标签: go

我正在查看Go中的documentation of a big integer arithmetic并尝试找到一个适合计算^ n的方法(类似于python中的pow(a, n))。

令我惊讶的是,GCDBinomial等一些简单的功能并不像modinverse那样直截了当,我找不到电源。我错过了它还是应该自己编写?

2 个答案:

答案 0 :(得分:3)

func (z *Int) Exp(x, y, m *Int) *Int
  

Exp set z = x ^ y mod | m | (即忽略m的符号),并返回z。如果y <= 0,则结​​果为1 mod | m |;如果m == nil或m == 0,则z = x ^ y。见Knuth,第2卷,第4.6.3节。

答案 1 :(得分:0)

因为我几乎完成了自己的实现(Daniel的建议不起作用,因为你总是必须在那里提供模数)我在这里添加它以防万一有人想看看它是如何{{3 }}。这是implemented efficiently和我的功能:

func powBig(a, n int) *big.Int{
    tmp := big.NewInt(int64(a))
    res := big.NewInt(1)
    for n > 0 {
        temp := new(big.Int)
        if n % 2 == 1 {
            temp.Mul(res, tmp)
            res = temp
        }
        temp = new(big.Int)
        temp.Mul(tmp, tmp)
        tmp = temp
        n /= 2
    }
    return res
}