[libmath-prime-util-perl] 22/54: More or less initial pbrent based on mulmod speed
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:52:08 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.38
in repository libmath-prime-util-perl.
commit e7fcbc365b5143d16a7266da591439d6e1d7d729
Author: Dana Jacobsen <dana at acm.org>
Date: Tue Feb 11 11:43:11 2014 -0800
More or less initial pbrent based on mulmod speed
---
factor.c | 12 ++++++++----
mulmod.h | 4 ++++
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/factor.c b/factor.c
index 3e02509..cce32fb 100644
--- a/factor.c
+++ b/factor.c
@@ -90,12 +90,16 @@ int factor(UV n, UV *factors)
/* loop over each remaining factor, until ntofac == 0 */
do {
- //while ( (n >= f*f) && (!_XS_is_prime(n)) ) {
while ( (n >= f*f) && (!is_prob_prime(n)) ) {
int split_success = 0;
- /* Adjust the number of rounds based on the number size */
- UV const br_rounds = ((n>>29) < 100000) ? 1500 : 4000;
- UV const sq_rounds =100000; /* 20k 91%, 40k 98%, 80k 99.9%, 120k 99.99% */
+ /* Adjust the number of rounds based on the number size and speed */
+#if MULMODS_ARE_FAST
+ UV const br_rounds = ((n>>29) < 100000) ? 4000 : 6000;
+ UV const sq_rounds = 100000; /* 20k 91%, 40k 98%, 80k 99.9%, 120k 99.99%*/
+#else
+ UV const br_rounds = ((n>>29) < 100000) ? 500 : 2000;
+ UV const sq_rounds = 150000;
+#endif
/* 99.7% of 32-bit, 94% of 64-bit random inputs factored here */
if (!split_success) {
diff --git a/mulmod.h b/mulmod.h
index b826e98..9c3ada0 100644
--- a/mulmod.h
+++ b/mulmod.h
@@ -13,6 +13,8 @@
/* if n is smaller than this, you can multiply without overflow */
#define HALF_WORD (UVCONST(1) << (BITS_PER_WORD/2))
+/* This will be true if we think mulmods are fast */
+#define MULMODS_ARE_FAST 1
#if (BITS_PER_WORD == 32) && HAVE_STD_U64
@@ -76,6 +78,8 @@
#else
/* UV is the largest integral type available (that we know of). */
+#undef MULMODS_ARE_FAST
+#define MULMODS_ARE_FAST 0
/* Do it by hand */
static INLINE UV _mulmod(UV a, UV b, UV n) {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git
More information about the Pkg-perl-cvs-commits
mailing list