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

时间:2012-08-01 08:34:18

标签: c++

在java中随机数可以得到像

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

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

我使用的代码如

    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();

但我不会得到随机数。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

首先,没有gmp_randclass构造函数接受gmp_randstate实例,因此您的代码没有为我编译。 recommended way to construct a gmp_randclass instance正在使用gmp_randinit_default,如下所示:

gmp_randclass rr(gmp_randinit_default);

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

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

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();

请注意,如Random State Seeding中所述,对于随机数生成器种子,使用低分辨率的当前时间通常是不好的选择。