如何计算两个 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()"))
}
标题说明了一切。我试图在 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()"))
}