我正在查看Go中的documentation of a big integer arithmetic并尝试找到一个适合计算^ n的方法(类似于python中的pow(a, n)
)。
令我惊讶的是,GCD,Binomial等一些简单的功能并不像modinverse那样直截了当,我找不到电源。我错过了它还是应该自己编写?
答案 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
}