在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();
但我不会得到随机数。
请帮帮我。
答案 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中所述,对于随机数生成器种子,使用低分辨率的当前时间通常是不好的选择。