rust - 模乘法

标签 rust

给定a , bm ,所有类型 u64 (或 u128 ),我想计算 (a * b) % m 。然而,ab可能很大,因此可能会发生溢出。

虽然我可以将它们转换到 BigUInt ,将它们相乘,然后将结果返回,这对我来说似乎有点不优雅。 (因为理论上不需要强制转换为 BigUInt。)

我还找到了modular arithmetic crate ,但它似乎没有维护,没有记录,并且在溢出的情况下乘法非常慢。另外,还有modular crate,但可能会发生溢出。

那么,在 Rust 中是否有更优雅的方式来进行模乘法?

最佳答案

如果m * m足够小而不会溢出,您可以使用(a % m) * (b % m) % m来保持被乘数更小,由于简洁的模块化属性,它产生与 a * b % m 相同的结果。

关于rust - 模乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73167128/

相关文章:

c - DPDK 函数在从 Rust 调用时与从 C 调用时具有不同的输出

rust - 解析字符串如何在 Rust 中包含负数?

Rust:在任务中执行解除引用的闭包

rust - 在 Rust 中,我如何定义一个全局变量/常量,其值是函数的结果?

rust - 为什么在改变Result的类型时,匹配一个Result需要显式的Err?

asynchronous - 如何用 future 引入特征间接?

rust - Rust 中的 default_type_params 功能有何用途?

enums - 如何有条件地检查枚举是一种变体还是另一种变体?

syntax - 如何从 as_slice() 更改为 [] 语法?

rust - 通过变量访问结构字段