[libmath-prime-util-perl] 157/181: small performance increase for next_prime

Partha P. Mukherjee ppm-guest at moszumanska.debian.org
Thu May 21 18:51:17 UTC 2015


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

ppm-guest pushed a commit to annotated tag v0.36
in repository libmath-prime-util-perl.

commit 49d01994b85774fcab01c060526132923e2ae8e5
Author: Dana Jacobsen <dana at acm.org>
Date:   Thu Jan 9 18:24:32 2014 -0800

    small performance increase for next_prime
---
 lib/Math/Prime/Util/PrimeIterator.pm | 18 ++++++++----------
 util.c                               |  8 +++++---
 xt/primality-proofs.pl               |  3 +++
 3 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/lib/Math/Prime/Util/PrimeIterator.pm b/lib/Math/Prime/Util/PrimeIterator.pm
index d778299..4573c34 100644
--- a/lib/Math/Prime/Util/PrimeIterator.pm
+++ b/lib/Math/Prime/Util/PrimeIterator.pm
@@ -36,9 +36,9 @@ sub __iter__ {
 
 sub value { ${$_[0]}; }
 sub next {
-  my $self = shift;
-  $$self = next_prime($$self);
-  return $self;
+  #my $self = shift;  $$self = next_prime($$self);  return $self;
+  ${$_[0]} = next_prime(${$_[0]});
+  return $_[0];
 }
 sub prev {
   my $self = shift;
@@ -47,9 +47,9 @@ sub prev {
   return $self;
 }
 sub iterate {
-  my $self = shift;
-  my $p = $$self;
-  $$self = next_prime($p);
+  #my $self = shift;  my $p = $$self;  $$self = next_prime($p);  return $p;
+  my $p = ${$_[0]};
+  ${$_[0]} = next_prime(${$_[0]});
   return $p;
 }
 
@@ -65,14 +65,12 @@ sub rewind {
 }
 
 sub peek {
-  my $self = shift;
-  return next_prime($$self);
+  return next_prime(${$_[0]});
 }
 
 # Some methods to match Math::NumSeq
 sub tell_i {
-  my $self = shift;
-  return prime_count($$self);
+  return prime_count(${$_[0]});
 }
 sub pred {
   my($self, $n) = @_;
diff --git a/util.c b/util.c
index b31d587..611fb94 100644
--- a/util.c
+++ b/util.c
@@ -280,11 +280,13 @@ UV _XS_next_prime(UV n)
   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]; }
-  while (!_is_prime7(d*30+m)) {
+  n = d*30+m;
+  while (!_is_prime7(n)) {
     /* Move forward one, knowing we are on the wheel */
-    m = nextwheel30[m];  if (m == 1) d++;
+    n += wheeladvance30[m];
+    m = nextwheel30[m];
   }
-  return(d*30+m);
+  return(n);
 }
 
 
diff --git a/xt/primality-proofs.pl b/xt/primality-proofs.pl
index a1f081f..16daeda 100755
--- a/xt/primality-proofs.pl
+++ b/xt/primality-proofs.pl
@@ -4,6 +4,9 @@ use strict;
 use Math::Prime::Util ':all';
 use Math::BigInt lib=>"GMP";
 
+if (!Math::Prime::Util::prime_get_config->{gmp}) {
+  print "\nYou should install Math::Prime::Util::GMP.\n\n";
+}
 $|++;
 
 print "random prime proofs: 50, 100, 200, 300, 400 +/- 50 digits\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