[libmath-prime-util-perl] 09/15: Transition some functions to forprimes

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


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

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

commit 615c37594de38143ffe1b2cb87dd20c1f0bffd6d
Author: Dana Jacobsen <dana at acm.org>
Date:   Wed May 29 22:35:30 2013 -0700

    Transition some functions to forprimes
---
 lib/Math/Prime/Util.pm | 42 ++++++++++++++++--------------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index d5476d2..3f8ad74 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -1059,9 +1059,7 @@ sub primorial {
       $pn = int( Math::Prime::Util::GMP::primorial($n) );
     }
   } else {
-    foreach my $p ( @{ primes($n) } ) {
-      $pn *= $p;
-    }
+    forprimes { $pn *= $_ } $n;
   }
   return $pn;
 }
@@ -1094,20 +1092,13 @@ sub consecutive_integer_lcm {
     return $pn->bzero->badd("$clcm");
   }
 
-  my @primes = @{primes(2,$n)};
-  while (@primes) {
-    my $p = $primes[0];
-    my $pmin = int($n/$p);
-    last if $p > $pmin;
-    my $p_power = $p*$p;
-    $p_power *= $p while $p_power <= $pmin;
+  forprimes {
+    my($p_power, $pmin) = ($_, int($n/$_));
+    $p_power *= $_ while $p_power <= $pmin;
     $pn *= $p_power;
-    shift @primes;
-  }
-  foreach my $p (@primes) {
-    $pn *= $p;
-  }
-  return $pn;
+  } $n;
+
+  return (ref($pn) eq 'Math::BigInt') ? $pn : int($pn);
 }
 
 
@@ -1416,9 +1407,7 @@ sub chebyshev_theta {
   _validate_num($n) || _validate_positive_integer($n);
   return _XS_chebyshev_theta($n) if $n <= $_XS_MAXVAL;
   my $sum = 0.0;
-  foreach my $p (@{primes($n)}) {
-    $sum += log($p);
-  }
+  forprimes { $sum += log($_); } $n;
   return $sum;
 }
 sub chebyshev_psi {
@@ -1427,11 +1416,11 @@ sub chebyshev_psi {
   return 0 if $n <= 1;
   return _XS_chebyshev_psi($n) if $n <= $_XS_MAXVAL;
   my ($sum, $logn, $mults_are_one) = (0.0, log($n), 0);
-  foreach my $p (@{primes($n)}) {
-    my $logp = log($p);
-    $mults_are_one = 1 if !$mults_are_one && $p > int($n/$p);
+  forprimes {
+    my $logp = log($_);
+    $mults_are_one = 1 if !$mults_are_one && $_ > int($n/$_);
     $sum += ($mults_are_one) ? $logp : $logp * int($logn/$logp+1e-15);
-  }
+  } $n;
   return $sum;
 }
 
@@ -1779,9 +1768,10 @@ sub verify_prime {
       return 0;
     }
     my $bpsw = 0;
-    if ($n <= $_XS_MAXVAL) {
-      $bpsw = _XS_miller_rabin($n, 2)
-           && _XS_is_extra_strong_lucas_pseudoprime($n);
+    my $intn = int($n->bstr);
+    if ($n->bcmp("$intn") == 0 && $intn <= $_XS_MAXVAL) {
+      $bpsw = _XS_miller_rabin($intn, 2)
+           && _XS_is_extra_strong_lucas_pseudoprime($intn);
     } elsif ($_HAVE_GMP) {
       $bpsw = Math::Prime::Util::GMP::is_prob_prime($n);
     } else {

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