如何计算两个 BigInts/BigUints 的幂?

How can I calculate power of two BigInts/BigUints?

标题说明了一切。我试图在 Rust 文档中找到一些东西,但我唯一遇到的是 BigInt/Biguint 结构的这个函数。

pub fn modpow(&self, exponent: &Self, modulus: &Self) -> Self

我也在 num::pow 中找到了这个函数,但它对我没有帮助,因为我的 exp 也是 BigInt/BigUint。

pub fn pow<T>(base: T, exp: usize) -> T

所以,有人知道吗?我在想我应该以某种方式使用 modpow 函数,但是我应该为模数参数发送什么?

您可以将指数转换为usize,然后调用BigUint::pow()。如果指数大于 usize::MAX,则无论如何都无法计算幂。例如:

use num_bigint::BigUint;
use std::convert::TryInto;

fn pow(n: BigUint, exp: BigUint) -> BigUint {
    n.pow(exp.try_into().expect("exponent too large for pow()"))
}

Playground