mpz_urandomb总是给出相同的结果。

问题描述 投票:1回答:1

每当执行这段代码时,都会得到同样的结果。我无法得到一个随机值。

temp的值总是出现6400306986398558324。(lambda = 256。)

mpz_t group_size,temp;
mpz_init(group_size);
mpz_init(temp);
gmp_randstate_t state;
gmp_randinit_mt (state);
mpz_urandomb (temp, state,lambda);
mpz_nextprime (group_size, temp);

printf("temp : %ld \n",mpz_get_ui(temp));
printf("Group Size : %ld \n",mpz_get_ui(group_size));
gmp
1个回答
0
投票

你需要为这个状态设置一个种子。从 公文:

职能: void gmp_randseed (gmp_randstate_t state, const mpz_t seed)

Function: Function: void gmp_randseed_ui (gmp_randstate_t state, unsigned long int seed)

下面是你的代码的例子(在现实世界中并没有真正的用处,因为你的代码是由你自己编写的。time(NULL) 将返回相同的结果整整一秒)。)

...
gmp_randinit_mt (state);
gmp_randseed_ui(state, time(NULL))
mpz_urandomb (temp, state,lambda);
...
© www.soinside.com 2019 - 2024. All rights reserved.