[flint] 12/24: fix and speed up n_is_prime on 32-bit
felix salfelder
felix-guest at moszumanska.debian.org
Wed Jun 25 11:16:11 UTC 2014
This is an automated email from the git hooks/post-receive script.
felix-guest pushed a commit to branch master
in repository flint.
commit e0cf7cc98b17fa99b2225847550462a9d8cadeb1
Author: Fredrik Johansson <fredrik.johansson at gmail.com>
Date: Tue Jun 17 20:41:34 2014 +0200
fix and speed up n_is_prime on 32-bit
---
ulong_extras/is_probabprime.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/ulong_extras/is_probabprime.c b/ulong_extras/is_probabprime.c
index 98a7a11..98b4877 100644
--- a/ulong_extras/is_probabprime.c
+++ b/ulong_extras/is_probabprime.c
@@ -40,7 +40,11 @@ int n_is_probabprime(mp_limb_t n)
mp_limb_t d;
unsigned int norm;
int isprime;
+#if FLINT64
double npre;
+#else
+ mp_limb_t ninv;
+#endif
if (n <= UWORD(1)) return 0;
if (n == UWORD(2)) return 1;
@@ -61,24 +65,27 @@ int n_is_probabprime(mp_limb_t n)
d = n - 1;
count_trailing_zeros(norm, d);
d >>= norm;
- npre = n_precompute_inverse(n);
#if !FLINT64
/* For 32-bit, just the 2-base or 3-base Miller-Rabin is enough */
+ /* The preinv functions are faster on 32-bit, and work up to
+ 2^32 (precomp only works up to 2^31) */
+ ninv = n_preinvert_limb(n);
+
if (n < UWORD(9080191))
{
- isprime = n_is_strong_probabprime_precomp(n, npre, UWORD(31), d)
- && n_is_strong_probabprime_precomp(n, npre, UWORD(73), d);
+ isprime = n_is_strong_probabprime2_preinv(n, ninv, UWORD(31), d)
+ && n_is_strong_probabprime2_preinv(n, ninv, UWORD(73), d);
}
else
{
- isprime = n_is_strong_probabprime_precomp(n, npre, UWORD(2), d)
- && n_is_strong_probabprime_precomp(n, npre, UWORD(7), d)
- && n_is_strong_probabprime_precomp(n, npre, UWORD(61), d);
+ isprime = n_is_strong_probabprime2_preinv(n, ninv, UWORD(2), d)
+ && n_is_strong_probabprime2_preinv(n, ninv, UWORD(7), d)
+ && n_is_strong_probabprime2_preinv(n, ninv, UWORD(61), d);
}
-
#else
+ npre = n_precompute_inverse(n);
/* For 64-bit, BPSW seems to be a little bit faster than 3 bases. */
if (n < UWORD(341531))
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/flint.git
More information about the debian-science-commits
mailing list