标题说明了一切。我试图在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函数,但是我应该给modulus参数发送什么呢?
2条答案
按热度按时间t9aqgxwy1#
您可以将指数转换为
usize
,然后调用BigUint::pow()
。如果指数大于usize::MAX
,您将无法计算幂。例如:Playground
drnojrws2#
试试我的big_pow函数注意:一个非常大的计算可能需要很长的时间,但是理论上它们应该有足够的时间循环执行。我还没有遇到任何内存分配失败,但是也没有进行非常彻底的测试。
如果需要使用模数:
我修改了这个原始源代码的第二个函数:https://docs.rs/crate/modexp/0.2.2/source/src/lib.rs