尝试在 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 中使用相同的运算符会很方便,如果不可能,有人可以建议替代方案吗?
根据 num-bigint
箱的
documentation,
BigInt
结构确实实现了右移运算符的 Shr
特性,只是当移位量本身是 BigInt
时则不然。如果您将移位量转换为标准整数类型(例如 i64
),那么它应该可以工作。
您不太可能想要移动大于
i64::MAX
的量,但如果您确实需要这样做,那么正确的结果将为零(因为没有计算机有 2^60 字节的内存),所以您可以编写一个简单的实现来检查这种情况。