有没有办法在 Rust 中对 BigInt 进行正确的位移?

Pos*_*don 5 math bit-shift bigint rust

当尝试对 BigInt 执行 >> 或 >>= 时,出现此错误:

no implementation for `BigInt >> BigInt

使用num_bigint::BigInt图书馆

编辑:更多上下文:

我正在将这个程序https://www.geeksforgeeks.org/how-to-generate-large-prime-numbers-for-rsa-algorithm/从 python/c++ 重写为 rust 但我将重点关注 python 实现编写用于处理非常大的 1024 位素数。

更新:我已经完成了 Rust 实现https://github.com/dzyphr/Rust_Repo/blob/master/big_prime/src/main.rs

在代码中,我们运行 Miller Rabin Primality 测试,其中包括如果我们发现 EC % 2 == 0,则将 EC: (​​prime-candidate - 1) 向右移动 1。正如我在 python 实现中提到的,EC 可能是一个令人难以置信的结果。大整数。

能够在 Rust 中使用相同的运算符会很方便,如果不可能,有人可以建议替代方案吗?

kay*_*ya3 8

根据板条箱的文档num-bigint,该BigInt结构确实实现了Shr右移运算符的特征,只是当移位量本身是BigInt. 如果您将移位量转换为标准整数类型(例如i64),那么它应该可以工作。

您不太可能想要移动大于 的量i64::MAX,但如果您确实需要这样做,那么正确的结果将为零(因为没有计算机有 2^60 字节的内存),因此您可以编写一个简单的检查该情况的实现。