diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2018-11-21 08:22:18 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2018-11-21 08:22:18 +0100 |
commit | 411fee2e3c3f0337f0ade3cf769fa4f4665ac95e (patch) | |
tree | e025069f19abec48819ad9de87f1bf884edbaea1 /mpz | |
parent | ebded3cc3c89f56e2e83bdd40585fba1a12790a2 (diff) | |
download | gmp-411fee2e3c3f0337f0ade3cf769fa4f4665ac95e.tar.gz |
mpz/millerrabin.c: gmp_randinit only if needed.
Diffstat (limited to 'mpz')
-rw-r--r-- | mpz/millerrabin.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/mpz/millerrabin.c b/mpz/millerrabin.c index 03b47784a..2d06fe4a7 100644 --- a/mpz/millerrabin.c +++ b/mpz/millerrabin.c @@ -71,7 +71,9 @@ mpz_millerrabin (mpz_srcptr n, int reps) /* BPSW test */ mpz_set_ui (x, 2); is_prime = millerrabin (n, x, y, q, k) && mpz_stronglucas (n, x, y); - if (is_prime) + + reps -= 24; + if (reps > 0 && is_prime) { /* (n-5)/2 */ mpz_sub_ui (nm, nm, 2L); @@ -79,14 +81,14 @@ mpz_millerrabin (mpz_srcptr n, int reps) gmp_randinit_default (rstate); - for (reps -= 24; reps > 0 && is_prime; --reps) + do { /* 3 to (n-1)/2 inclusive, don't want 1, 0 or 2 */ mpz_urandomm (x, rstate, nm); mpz_add_ui (x, x, 3L); is_prime = millerrabin (n, x, y, q, k); - } + } while (--reps > 0 && is_prime); gmp_randclear (rstate); } |