[libmath-prime-util-perl] 16/18: Allow factor.pl to parse many MPU functions

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


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

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

commit 72a23f42eaa40d9985e773084554850d7cab9205
Author: Dana Jacobsen <dana at acm.org>
Date:   Sat Apr 20 23:34:26 2013 -0700

    Allow factor.pl to parse many MPU functions
---
 bin/factor.pl | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/bin/factor.pl b/bin/factor.pl
index f7293dd..5cefe90 100755
--- a/bin/factor.pl
+++ b/bin/factor.pl
@@ -7,6 +7,14 @@ use Math::Prime::Util qw/factor nth_prime/;
 $| = 1;
 no bigint;
 
+# Allow execution of any of these functions in the command line
+my @mpu_funcs = (qw/next_prime prev_prime prime_count nth_prime random_prime
+                    random_ndigit_prime random_nbit_prime random_strong_prime
+                    random_maurer_prime primorial pn_primorial moebius mertens
+                    euler_phi jordan_totient exp_mangoldt divisor_sum
+                    consecutive_integer_lcm/);
+my %mpu_func_map;
+
 my %opts;
 GetOptions(\%opts,
            'version',   # turn off MPU::GMP for debugging
@@ -42,11 +50,21 @@ if (@ARGV) {
 sub eval_expr {
   my $expr = shift;
   die "$expr cannot be evaluated" if $expr =~ /:/;  # Use : for escape
-  $expr =~ s/nth_prime\(/:1(/g;
-  $expr =~ s/log\(/:2(/g;
+  if (scalar(keys %mpu_func_map) == 0) {
+    my $n = 10;
+    foreach my $func (@mpu_funcs) {
+      $mpu_func_map{$func} = sprintf("%03d", $n++);
+    }
+  }
+  $expr =~ s/\blog\(/:001(/g;
+  foreach my $func (@mpu_funcs) {
+    $expr =~ s/\b$func\(/:$mpu_func_map{$func}(/g;
+  }
   die "$expr cannot be evaluated" if $expr =~ tr|-0123456789+*/() :||c;
-  $expr =~ s/:1/nth_prime/g;
-  $expr =~ s/:2/log/g;
+  $expr =~ s/:001/log/g;
+  foreach my $func (@mpu_funcs) {
+    $expr =~ s/:$mpu_func_map{$func}\(/Math::Prime::Util::$func(/g;
+  }
   $expr =~ s/(\d+)/ Math::BigInt->new("$1") /g;
   my $res = eval $expr; ## no critic
   die "Cannot eval: $expr\n" if !defined $res;
@@ -62,6 +80,10 @@ Usage: $0 [options] [number] ...
 Print the prime factors of each positive integer given on the command line,
 or reads numbers from standard input if called without arguments.
 
+Math expressions may be given as arguments, which will be evaluated before
+factoring.  This includes most Math::Prime::Util functions including things
+like prime_count(#), nth_prime(#), primorial(#), random_nbit_prime(#), etc.
+
   --help       displays this help message
   --version    displays the version information
 

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