0
mpz_t rand1,rand2;
mpz_init (rand1);
mpz_init (rand2);

mpz_random (rand1,512);
//mpz_random (rand2,512);

mpz_nextprime ( rand2, rand1 );
gmp_printf("random %Zd\n", rand2);
//free the big ints
mpz_clear(rand1);
mpz_clear(rand2);

但是,我是在随机打印后打印的,但第二次我调用下一个素数时没有打印出来?

4

1 回答 1

1

从信息页面:

-- 函数: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) 生成最多为MAX_SIZE个肢体的随机整数。生成的随机数不满足任何特定的随机性要求。当 MAX_SIZE 为负时,生成负随机数。

此功能已过时。请改用mpz_urandomb' ormpz_urandomm'。

您正在创建一个具有 512 个肢体的随机(ish)整数,如果肢体为 32 位,则为 16384 位,如果肢体为 64 位,则为 32768 位。该范围内的素数很少,因此 GMP 需要一段时间才能找到。

大概你打算找到一个 512 位的素数?

于 2012-10-06T21:36:23.240 回答