mpz_urandomb总是给出相同的结果

时间:2019-06-10 17:06:02

标签: gmp

只要执行此代码,就会得到相同的结果。我无法获得随机值。

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

1 个答案:

答案 0 :(得分:0)

您需要为状态设置种子。来自official documentation

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

功能: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);
...