【问题标题】:How do I generate a random num::BigUint?如何生成随机 num::BigUint?
【发布时间】:2018-08-01 18:49:20
【问题描述】:

我需要一个随机的 256 位无符号数。我发现RandBigInt 方法有RandBigInt 特征,但我很难找到它的实现。

我前段时间尝试为BigInt 执行此操作。从那以后,板条箱已经更新。这就是我现在使用它获取BigUint 的方式。

extern crate num;
extern crate rand;

use num::bigint::{BigInt, BigUint, RandBigInt};

fn main() {
    let mut rng = rand::thread_rng();
    let mut n: BigUint = BigUint::default();
    loop {
        let bigUint: Option<BigUint> = rng.gen_bigint(256).to_biguint();
        match bigUint {
            Some(num) => {
                n = num.clone();
                println!("Found the 1st BigUint - {}", num);
                break;
            }
            _ => {}
        }
    }
}

我的 Cargo.toml

中的内容
num = "0.1.42"
rand = "0.4.2"

我确信必须有一些直接的方法来实现这一点。

【问题讨论】:

    标签: rust bigint


    【解决方案1】:

    来自num的自述文件:

    rand 功能在num-bigintnum-complex 中启用随机化特征。

    [dependencies]
    num-bigint = { version = "0.2.0", features = ["rand"] }
    rand = "0.5.4"
    

    那么你需要使用实现rand::DistributionRandomBits

    extern crate num_bigint;
    extern crate rand;
    
    use num_bigint::{BigInt, BigUint, RandomBits};
    use rand::Rng;
    
    fn main() {
        let mut rng = rand::thread_rng();
    
        let signed: BigInt = rng.sample(RandomBits::new(256));
        let unsigned: BigUint = rng.sample(RandomBits::new(256));
    
        println!("{}, {}", signed, unsigned)
    }
    

    【讨论】:

      【解决方案2】:

      Shepmaster 的回答是在最新版本的 rand 中引发了一个 trait bound error。让它工作:

      Cargo.toml

      edition = "2018"
      
      [dependencies]
      rand = "0.6"
      num-bigint = { version = "0.2.2", features = ["rand"] }
      

      main.rs

      use num_bigint::{BigUint, RandBigInt};
      
      fn main() {
          let mut rng = rand::thread_rng();
          let unsigned: BigUint = rng.gen_biguint(256);
          println!("{}", unsigned);  
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-08
        • 2017-05-10
        • 2011-02-19
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多