簡體   English   中英

GMP 卡在生成相同的隨機整數

[英]GMP stuck generating same random integers

我想生成一個 n 字節的隨機 integer z 使得

2^(n-1) <= z <= 2^n - 1

每當我運行以下代碼 gmp 吐出完全相同的 integer 時,我做錯了什么?

// Random int of n bits.
const auto n_bits = 1024;
mpz_t mpz_int;
gmp_randstate_t state;
mpz_init(mpz_int);
gmp_randinit_default(state);
mpz_rrandomb(mpz_int, state, n_bits);

std::cout<<"Random int generated:"<<std::endl;
std::cout<<mpz_get_str(nullptr, 10, mpz_int)<<std::endl;

mpz_rrandom 的mpz_rrandomb僅在我更改n_bits參數時才會更改。 我在 Ubuntu 和 MacOS 上試過這個。我也試過mpz_urandomb同樣的問題。 我假設我錯過了一些初始化,我已經閱讀了幾個小時的 gmp 文檔,但我找不到上述方法不起作用的原因。

要重現,將上述代碼填充到主 function 中,使用標志編譯:

g++ main.cpp -O2 -Wall -std=c++14 -lstdc++ -lgmp -lgmpxx

謝謝你。

gmp_randinit_default顯然將種子設置為某個固定值。 您應該在之后調用gmp_randseedgmp_randseed_ui將種子設置為您自己的值,這在每次運行時都不相同。

對於初始測試,您可以嘗試gmp_randseed_ui(state, getpid()) 在 Linux 上,您可以通過調用getrandom()或讀取/dev/urandom獲得更多隨機種子。 不確定 MacOS 上提供了哪些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM