有没有办法在 Rust 中对 BigInt 进行右移?

问题描述 投票:0回答:1

尝试在 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 中使用相同的运算符会很方便,如果不可能,有人可以建议替代方案吗?

math rust bit-shift bigint
1个回答
7
投票

根据 num-bigint 箱的

documentation
BigInt
结构确实实现了右移运算符的
Shr
特性,只是当移位量本身是
BigInt
时则不然。如果您将移位量转换为标准整数类型(例如
i64
),那么它应该可以工作。

您不太可能想要移动大于

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

© www.soinside.com 2019 - 2024. All rights reserved.