[libmath-prime-util-perl] 44/59: Minor GMP related change for performance and doc

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


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

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

commit 084e79e9cb68f951f66838ecff7afb66a005f258
Author: Dana Jacobsen <dana at acm.org>
Date:   Mon Jul 9 02:15:16 2012 -0600

    Minor GMP related change for performance and doc
---
 lib/Math/Prime/Util.pm | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index c3b239f..1c02e6f 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -292,17 +292,21 @@ sub primes {
 #
 # The random_maurer_prime function uses Maurer's algorithm of course.
 #
-# The current code is reasonably fast for native, but slow for bigints.
+# The current code is reasonably fast for native, but slow for bigints.  Using
+# the M::P::U::GMP module helps immensely.  Performance does differ though --
+# my 32-bit machine is ~5x slower than this 64-bit machine for this.
+#
 #    n-bits      no GMP      with MPU::GMP
 #    ----------  ----------  --------------
-#       24-bit         70uS
-#       64-bit       0.01s       0.01s
-#      128-bit       0.2s        0.02s
-#      256-bit       1s          0.04s
-#      512-bit      10s          0.1s
-#     1024-bit     1m            0.5s
-#     2048-bit    ~4m            5s
-#     4096-bit   ~80m           35s
+#       24-bit         15uS                 (native)
+#       64-bit         60uS                 (native)
+#      128-bit       0.2s        0.01s
+#      256-bit       1s          0.02s
+#      512-bit      10s          0.03s
+#     1024-bit     1m            0.1s
+#     2048-bit    ~4m            0.6s
+#     4096-bit   ~80m            7s
+#     8192-bit   ----           80s
 #
 # To verify distribution:
 #   perl -Iblib/lib -Iblib/arch -MMath::Prime::Util=:all -E 'my %freq; $n=1000000; $freq{random_nbit_prime(6)}++ for (1..$n); printf("%4d %6.3f%%\n", $_, 100.0*$freq{$_}/$n) for sort {$a<=>$b} keys %freq;'
@@ -551,11 +555,15 @@ sub primes {
 
       # Trial divide up to $B
       next if !($n % 3) || !($n % 5) || !($n % 7) || !($n % 11) || !($n % 13);
-      my $looks_prime = 1;
-      foreach my $p (@primes) {
-        do { $looks_prime = 0; last; } if !($n % $p);
+      if ($_HAVE_GMP) {
+        next unless Math::Prime::Util::GMP::is_strong_pseudoprime($n, 2, 7);
+      } else {
+        my $looks_prime = 1;
+        foreach my $p (@primes) {
+          do { $looks_prime = 0; last; } if !($n % $p);
+        }
+        next unless $looks_prime;
       }
-      next unless $looks_prime;
       #warn "$n passes trial division\n";
 
       # a is a random number between 2 and $n-2

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