c++中使用GMP的随机数生成

Random number generation in c++ using GMP

本文关键字:随机数 GMP c++      更新时间:2023-10-16

在java中,随机数可以像一样

protected final static Random RANDOM = new Random(System.currentTimeMillis()); 

在c++中使用GMP库如何可能生成随机数?

我使用了类似的代码

    gmp_randstate_t s;
unsigned long seed;
seed = time(NULL); 
gmp_randinit_default(s);
gmp_randseed_ui(s, seed);
mpz_class ran;
gmp_randclass rr(s);
ran =rr.get_z_bits(125);
long int random=ran.get_ui();

但是我没有得到随机数。

请帮帮我。

首先,没有采用gmp_randstate实例的gmp_randclass构造函数,所以您的代码没有为我编译。建议使用gmp_randinit_default来构造gmp_randclass instance,如下所示:

gmp_randclass rr(gmp_randinit_default);

代码的第一部分是为gmp_randstate_t s设定种子,但在代码的第二部分中(在上述更改之后)不使用随机状态变量s。除非以其他方式设定种子,否则默认的GMP随机数生成器始终以相同的种子开始,这意味着每次运行程序时都会生成相同的序列的随机数。可以使用gmp_randclass::seed函数为gmp_randclass的实例设定种子。

以下代码与您的代码类似,但根据当前时间为随机数生成器种子。

mpz_class ran;
gmp_randclass rr(gmp_randinit_default);
rr.seed(time(NULL));
ran =rr.get_z_bits(125);
long int random=ran.get_ui();

请注意,如随机状态种子中所讨论的,对于随机数生成器种子,使用低分辨率当前时间通常是一个糟糕的选择。