如何解决GMP 卡在生成相同的随机整数
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;
只有当我更改 mpz_rrandomb
参数时,n_bits
的输出才会更改。
我在 Ubuntu 和 MacOS 上试过这个。我也试过 mpz_urandomb
- 同样的问题。我想我遗漏了一些初始化,我已经看了几个小时的 gmp 文档,但我找不到上述方法不起作用的原因。
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 上提供了哪些。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。