[libmath-prime-util-perl] 07/11: Document the prime iterator
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:48:32 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.28
in repository libmath-prime-util-perl.
commit efa7895ee64d11045c106b12f04010c0a6962c92
Author: Dana Jacobsen <dana at acm.org>
Date: Wed May 22 01:36:29 2013 -0700
Document the prime iterator
---
TODO | 2 ++
XS.xs | 2 +-
lib/Math/Prime/Util.pm | 27 ++++++++++++++++++++++++---
lib/Math/Prime/Util/PrimeArray.pm | 3 +--
4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/TODO b/TODO
index b2bce1a..bc275d1 100644
--- a/TODO
+++ b/TODO
@@ -54,3 +54,5 @@
- Figure out a way to make the internal FOR_EACH_PRIME macros use a segmented
sieve.
+
+- prime_count_approx on a 100-digit bigint is really slow without MPFR.
diff --git a/XS.xs b/XS.xs
index 491b6f3..f395c63 100644
--- a/XS.xs
+++ b/XS.xs
@@ -1,5 +1,5 @@
-#define PERL_NO_GET_CONTEXT /* Define at top for more efficiency. */
+#define PERL_NO_GET_CONTEXT 1 /* Define at top for more efficiency. */
#include "EXTERN.h"
#include "perl.h"
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index 1347132..3af8fa8 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -1371,9 +1371,7 @@ sub prime_iterator {
if (ref($p) ne 'Math::BigInt' && $p <= $_XS_MAXVAL) {
return sub { $p = _XS_next_prime($p); return $p; };
} elsif ($_HAVE_GMP) {
- return sub { my $next = Math::Prime::Util::GMP::next_prime($p);
- $p = $p-$p+$next;
- return $p; };
+ return sub { $p = $p-$p+Math::Prime::Util::GMP::next_prime($p); return $p;};
} else {
return sub { $p = Math::Prime::Util::PP::next_prime($p); return $p; }
}
@@ -2692,6 +2690,29 @@ block for each prime in the range. Compared to getting a big array of primes
and iterating through it, this is more memory efficient and perhaps more
convenient.
+Inside the block, you may use C<last> to exit early, or C<return> to skip to
+the next entry.
+
+
+=head2 prime_iterator
+
+ my $it = prime_iterator;
+ $sum += $it->() for 1..100000;
+
+Returns a closure-style iterator. The start value defaults to the first
+prime (2) but an initial value may be given as an argument, which will result
+in the first value returned being the next prime greater than or equal to the
+argument. For example, this:
+
+ my $it = prime_iterator(200); say $it->(); say $it->();
+
+will return 211 followed by 223, as those are the next primes E<gt>= 200.
+On each call, the iterator returns the current value and increments to
+the next prime.
+
+In general, L</forprimes> will be more efficient, but the generic iterator has
+a little more flexibility.
+
=head2 prime_count
diff --git a/lib/Math/Prime/Util/PrimeArray.pm b/lib/Math/Prime/Util/PrimeArray.pm
index 39fa38a..377b418 100644
--- a/lib/Math/Prime/Util/PrimeArray.pm
+++ b/lib/Math/Prime/Util/PrimeArray.pm
@@ -269,8 +269,7 @@ for reasonably small numbers. It does not support random access. It is
very fast for small values, but is very slow with large counts.
L<Math::Primes::TiedArray> is remarkably impractical for anything other
-than very small numbers. The sieve used is incredibly slow, and the memory
-use is crazy.
+than very small numbers.
=head1 SEE ALSO
--
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