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' or代わりに mpz_urandomm' を使用してください。

512 の手足を持つランダムな (ish) 整数を作成しています。これは、手足が 32 ビットの場合は 16384 ビット、手足が 64 ビットの場合は 32768 ビットです。その範囲の素数はまばらなので、GMP は素数を見つけるのに時間がかかります。

おそらく、512 ビットの素数を見つけるつもりでしたか?

于 2012-10-06T21:36:23.240 に答える