summaryrefslogtreecommitdiff
path: root/mpz
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2018-11-21 08:22:18 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2018-11-21 08:22:18 +0100
commit411fee2e3c3f0337f0ade3cf769fa4f4665ac95e (patch)
treee025069f19abec48819ad9de87f1bf884edbaea1 /mpz
parentebded3cc3c89f56e2e83bdd40585fba1a12790a2 (diff)
downloadgmp-411fee2e3c3f0337f0ade3cf769fa4f4665ac95e.tar.gz
mpz/millerrabin.c: gmp_randinit only if needed.
Diffstat (limited to 'mpz')
-rw-r--r--mpz/millerrabin.c8
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);
}