0

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

但我没有得到随机数。

请帮我。

4

1 回答 1

1

首先,没有gmp_randclass采用gmp_randstate实例的构造函数,因此您的代码没有为我编译。构造 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中所讨论的,使用低分辨率当前时间对于随机数生成器种子来说通常是一个糟糕的选择。

于 2012-08-01T20:11:36.563 回答