gpt4 book ai didi

c++ - GMP 卡住生成相同的随机整数

转载 作者:行者123 更新时间:2023-12-04 15:01:57 27 4
gpt4 key购买 nike

我想生成一个 n 字节的随机整数 z,这样

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

每当我运行以下代码时,gmp 会输出完全相同的整数,我做错了什么?

// 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;

只有当我更改n_bits 参数时,mpz_rrandomb 的输出才会改变。我在 Ubuntu 和 MacOS 上试过这个。我也试过 mpz_urandomb - 同样的问题。我假设我缺少一些初始化,我已经阅读 gmp 文档几个小时了,但我找不到上述方法不起作用的原因。

要重现,把上面的代码塞进main函数,带flags编译:

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

谢谢。

最佳答案

gmp_randinit_default 显然将种子设置为某个固定值。你应该调用gmp_randseed or gmp_randseed_ui之后将种子设置为您自己的值,每次运行都不会相同。

对于初始测试,您可以尝试 gmp_randseed_ui(state, getpid())。在 Linux 上,您可以通过调用 getrandom() 或读取 /dev/urandom 来获得更随机的种子。不确定在 MacOS 上提供了哪些。

关于c++ - GMP 卡住生成相同的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66817513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com