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

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

commit 5b0992f346f1a92cb236af9e47d0848ba6852117
Author: Dana Jacobsen <d...@acm.org>
Date:   Tue Sep 24 18:58:54 2013 -0700

    Updates for release
---
 examples/test-factor-gnufactor.pl |  2 +-
 factor.c                          |  8 ++++----
 lib/Math/Prime/Util.pm            | 14 +++++++++++---
 xt/primality-proofs.pl            | 21 +++++++++++++++------
 4 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/examples/test-factor-gnufactor.pl 
b/examples/test-factor-gnufactor.pl
index b618b59..4546910 100755
--- a/examples/test-factor-gnufactor.pl
+++ b/examples/test-factor-gnufactor.pl
@@ -29,7 +29,7 @@ my $num = 1000;
 # GNU factor gets its result by multiple shells out to /usr/bin/factor with
 # the numbers as command line arguments.  This adds a lot of overhead that
 # has nothing to do with their implementation.  For comparison, try turning
-# on the MPU factor.pl script, and weep for Perl's startup cost.
+# on the MPU factor.pl script, and weep at Perl's startup cost.
 
 my $do_gnu = 1;
 my $do_pari = 1;
diff --git a/factor.c b/factor.c
index 4c08193..82d09c7 100644
--- a/factor.c
+++ b/factor.c
@@ -320,7 +320,7 @@ UV _XS_divisor_sum(UV n, UV k)
       while (i+1 < nfac && f == factors[i+1]) { e++; i++; }
       if (e > 1) {
         UV pke = f;
-        for (j = 1; j < e; j++) {
+        for (j = 1; j < (int)e; j++) {
           pke *= f;
           fmult += pke;
         }
@@ -330,13 +330,13 @@ UV _XS_divisor_sum(UV n, UV k)
   } else {
     for (i = 0; i < nfac; i++) {
       UV e = 1,  f = factors[i];
-      UV fmult,  pk = f;
-      for (j = 1; j < k; j++)  pk *= f;
+      UV fmult, pk = f;
+      for (j = 1; j < (int)k; j++)  pk *= f;
       while (i+1 < nfac && f == factors[i+1]) { e++; i++; }
       fmult = 1 + pk;
       if (e > 1) {
         UV pke = pk;
-        for (j = 1; j < e; j++) {
+        for (j = 1; j < (int)e; j++) {
           pke *= pk;
           fmult += pke;
         }
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index 880a877..3efc1cf 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -2828,10 +2828,16 @@ and iterating through it, this is more memory efficient 
and perhaps more
 convenient.  This will almost always be the fastest way to loop over a range
 of primes.  Nesting and using in threads are allowed.
 
+Math::BigInt objects may be used for the range.
+
 For some uses an iterator (L</prime_iterator>, L</prime_iterator_object>)
 or a tied array (L<Math::Prime::Util::PrimeArray>) may be more convenient.
-Objects can be passed to functions, and allow early loop exits which are
-only possible in L</forprimes> by using an exception.
+Objects can be passed to functions, and allow early loop exits without
+exceptions.  Here is a clumsy L</forprimes> exception example:
+
+  use bigint;
+  eval { forprimes { die "$_\n" if $_ % 123 == 1 } 2**100, 2**101 };
+  my $n = 0+$@;
 
 
 =head2 prime_iterator
@@ -2863,7 +2869,9 @@ or L<Math::Prime::Util::PrimeArray> (a tied array).
 
 Returns a L<Math::Prime::Util::PrimeIterator> object.  A shortcut that loads
 the package if needed, calls new, and returns the object.  See the
-documentation for that package for details.
+documentation for that package for details.  This object has more features
+than the simple one above (e.g. the iterator is bi-directional), and also
+handles iterating across bigints.
 
 
 =head2 prime_count
diff --git a/xt/primality-proofs.pl b/xt/primality-proofs.pl
index 7dfb951..c4cdf85 100755
--- a/xt/primality-proofs.pl
+++ b/xt/primality-proofs.pl
@@ -9,12 +9,19 @@ $|++;
 # The number of tests performed.  71 makes a nice display for 80 columns.
 my $num = 71;
 # Select random primes with sizes randomly between 4 and this number of bits.
-my $size = 300;
-# Which selection method?
-#    mpu is 2x faster than pari, but it's our code
-#    pari works pretty well, and is 2x faster than Crypt::Primes
-#    cpmaurer is slow and can produce composites
-my $prime_method = 'pari';   # mpu, pari, or cpmaurer
+my $size = 500;
+# Which selection method?  Ideally we would use some independent code.  Time
+# for one thousand random primes from rand(4-300) or rand(4-600) bits:
+#
+#    300bits  600bits  which
+#       2sec     6sec  mpu (with mpu::gmp installed)
+#      31sec   124sec  pari
+#      97sec   254sec  cpmaurer
+#
+# We don't seem to have any practical choice other than MPU's
+# random_nbit_prime as the other random prime code is just so slow.
+#
+my $prime_method = 'mpu';   # mpu, pari, or cpmaurer
 
 my @ns;
 print "Generate ";
@@ -29,6 +36,8 @@ foreach my $i (1..$num) {
   } elsif ($prime_method eq 'pari') {
     require Math::Pari;
     require Crypt::Random;
+    # This is ~4x faster, has awful distribution.  Still much slower than MPU.
+    # $n = Math::Pari::nextprime( ...makerandom... );
     do { $n = Crypt::Random::makerandom(Size=>$bits,Strength=>0); }
        while !Math::Pari::isprime($n);
   } elsif ($prime_method eq 'mpu') {

-- 
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

Reply via email to