[libmath-prime-util-perl] 02/33: Simplify next_prime / prev_prime

```This is an automated email from the git hooks/post-receive script.

ppm-guest pushed a commit to annotated tag v0.37
in repository libmath-prime-util-perl.```
```
Author: Dana Jacobsen <d...@acm.org>
Date:   Thu Jan 16 11:09:35 2014 -0800

Simplify next_prime / prev_prime
---
factor.c |  2 +-
sieve.h  |  8 ++++++--
util.c   | 21 +++++++--------------
3 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/factor.c b/factor.c
index d1259b1..690e3f6 100644
--- a/factor.c
+++ b/factor.c
@@ -131,7 +131,7 @@ int factor(UV n, UV *factors)
n = tofac_stack[ntofac];  /* Set n to the other one */
} else {
-        /* Factor via trial division.  Nothing should make it here. */
+        /* Factor via trial division.  Nothing should ever get here. */
UV m = f % 30;
UV limit = isqrt(n);
if (verbose) printf("doing trial on %"UVuf"\n", n);
diff --git a/sieve.h b/sieve.h
index c14cc2d..63a7cda 100644
--- a/sieve.h
+++ b/sieve.h
@@ -32,9 +32,13 @@ static const unsigned char imask30[129] = {
/* Add this to a number and you'll ensure you're on a wheel location */
static const unsigned char distancewheel30[30] =
{1,0,5,4,3,2,1,0,3,2,1,0,1,0,3,2,1,0,1,0,3,2,1,0,5,4,3,2,1,0};
-/* Once on the wheel, add this to get to next spot.  In p space, not m. */
+/* add this to n to get to the next wheel location */
static const unsigned char wheeladvance30[30] =
-    {0,6,0,0,0,0,0,4,0,0,0,2,0,4,0,0,0,2,0,4,0,0,0,6,0,0,0,0,0,2};
+    {1,6,5,4,3,2,1,4,3,2,1,2,1,4,3,2,1,2,1,4,3,2,1,6,5,4,3,2,1,2};
+/* subtract this from n to get to the previous wheel location */
+static const unsigned char wheelretreat[30] =
+    {1,2,1,2,3,4,5,6,1,2,3,4,1,2,1,2,3,4,1,2,1,2,3,4,1,2,3,4,5,6};
+

#ifdef FUNC_is_prime_in_sieve
static int is_prime_in_sieve(const unsigned char* sieve, UV p) {
diff --git a/util.c b/util.c
index 39e3e22..d1a5117 100644
--- a/util.c
+++ b/util.c
@@ -235,17 +235,12 @@ UV next_prime(UV n)
release_prime_cache(sieve);
if (next != 0) return next;

-  d = n/30;
-  m = n - d*30;
-  /* Move forward one, knowing we may not be on the wheel */
-  if (m == 29) { d++; m = 1; } else  { m = nextwheel30[m]; }
-  n = d*30+m;
-  while (!is_prob_prime(n)) {
-    /* Move forward one, knowing we are on the wheel */
+  m = n % 30;
+  do { /* Move forward one. */
m = nextwheel30[m];
-  }
-  return(n);
+  } while (!is_prob_prime(n));
+  return n;
}

@@ -264,12 +259,10 @@ UV prev_prime(UV n)
}
release_prime_cache(sieve);

-  d = n/30;
-  m = n - d*30;
-  do {
+  m = n % 30;
+  do { /* Move back one. */
+    n -= wheelretreat[m];
m = prevwheel30[m];
-    if (m==29) d--;
-    n = d*30+m;
} while (!is_prob_prime(n));
return n;
}

--
Alioth's /usr/local/bin/git-commit-notice on
/srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits
```