给定a
, b
和m
,所有类型 u64
(或 u128
),我想计算 (a * b) % m
。然而,a
和b
可能很大,因此可能会发生溢出。
虽然我可以将它们转换到 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/