Изменение состояния ГПСЧ в gmp

Рейтинг: 2Ответов: 2Опубликовано: 03.05.2015

Нужно получить большое случайное простое число. Для работы с длинной арифметикой использую библиотеку gmp. Код получается примерно таким

mpz_t p;
mpz_t p_max;
mpz_t two_mpz;
mpz_init(p);
mpz_init(p_max);
mpz_init_set_d(two_mpz, 2);
mpz_pow_ui(p_max, two_mpz, 256);
gmp_randstate_t randstate;
gmp_randinit_default(randstate);
mpz_urandomm(p, randstate, p_max);
mpz_nextprime(p, p);

Проблема в том, что значение p всегда одно и то же. Видимо это связано с тем, что состояние ГПСЧ каждыйраз одно и то же. А как его изменить?

Заранее спасибо

Ответы

▲ 1Принят

Функция gmp_randseed(), выношу из комментария.

▲ 1

Суть в том, чтоб состояние ГПСЧ (seed) зависело от некого пусть не случайного, но меняющегося значения, например от времени. Для этого нужно использовать функцию gmp_randseed. Таким образом мой код расширяется до:

mpz_t p;
mpz_t p_max;
mpz_t two_mpz;
mpz_init(p);
mpz_init(p_max);
mpz_init_set_d(two_mpz, 2);
mpz_pow_ui(p_max, two_mpz, 256);
gmp_randstate_t randstate;
gmp_randinit_default(randstate);

time_t t1 = time(NULL);
gmp_randseed_ui(randstate, t1);

mpz_urandomm(p, randstate, p_max);
mpz_nextprime(p, p);