[libmath-prime-util-perl] 53/55: Add binomial, valuation, and invmod

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


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

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

commit af182d101de6391c79d96dcd5f325ac10f6c71ea
Author: Dana Jacobsen <dana at acm.org>
Date:   Sat May 17 22:12:28 2014 -0700

    Add binomial, valuation, and invmod
---
 xt/pari-compare.pl | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/xt/pari-compare.pl b/xt/pari-compare.pl
index be86b4a..5a07226 100755
--- a/xt/pari-compare.pl
+++ b/xt/pari-compare.pl
@@ -14,10 +14,11 @@ BEGIN {
   no Config;
 }
 
-my $small = 100000;
+my $small = 80_000;
 print "Comparing for small inputs: 0 - $small\n";
 
 foreach my $n (0 .. $small) {
+  print '.' unless ($n+1) % int($small/80);
   die "isprime($n)" unless Math::Pari::isprime($n) == !!is_prime($n);
   die "is_prob_prime($n)" unless Math::Pari::isprime($n) == !!is_prob_prime($n);
   die "next_prime($n)" unless Math::Pari::nextprime($n+1) == next_prime($n);
@@ -36,6 +37,10 @@ foreach my $n (0 .. $small) {
   die "bigomega($n)" unless Math::Pari::bigomega($n) == factor($n);
   die "numdiv($n)" unless Math::Pari::numdiv($n) == divisors($n);
 
+  for my $k (2,3,9,10) {
+    die "valuation($n,$k)" unless Math::Pari::valuation($n,$k) == valuation($n,$k);
+  }
+
   foreach my $k (0..4) {
     die "sigma($n,$k)" unless Math::Pari::sigma($n,$k) == divisor_sum($n,$k);
   }
@@ -51,6 +56,15 @@ foreach my $n (0 .. $small) {
     unless Math::Pari::sumdiv($n,"d","d^3*moebius($n/d)")
         == jordan_totient(3,$n);
 
+  if ($n > 1) {
+    for (1..10) {
+      my $k;  do { $k = int(rand(50)) } while !($k % $n);
+      die "binomial($n,$k)" unless Math::Pari::binomial($n,$k) == binomial($n,$k);
+      my $negn = - ($n >> 1);
+      die "binomial($negn,$k)" unless Math::Pari::binomial($negn,$k) == binomial($negn,$k);
+    }
+  }
+
   die "nth_prime($n)" unless Math::Pari::prime($n) == nth_prime($n);
 
   # All the pari2iv calls are very time-consuming
@@ -76,7 +90,6 @@ foreach my $n (0 .. $small) {
   }
 
   { my $m = int(rand($n-1));
-    my $mn = PARI "Mod($m,$n)";
     my $invmod = invmod($m, $n);
     if (defined $invmod) {
       die "invmod($m, $n)" unless Math::Pari::lift(PARI "Mod(1/$m,$n)") == $invmod;
@@ -134,7 +147,7 @@ foreach my $n (0 .. $small) {
     }
   }
 
-  print "." unless $n % 1250;
+  #print "." unless $n % 1250;
 }
 
 print "\nkronecker, gcd, and lcm for small values\n";
@@ -177,6 +190,10 @@ while (1) {
   die "bigomega($n)" unless Math::Pari::bigomega($n) == factor($n);
   die "numdiv($n)" unless Math::Pari::numdiv($n) == divisors($n);
 
+  for my $k (2,3,9,10) {
+    die "valuation($n,$k)" unless Math::Pari::valuation($n,$k) == valuation($n,$k);
+  }
+
   foreach my $k (0..4) {
     die "sigma($n,$k)" unless Math::Pari::sigma($n,$k) == divisor_sum($n,$k);
   }
@@ -193,6 +210,15 @@ while (1) {
     unless Math::Pari::sumdiv($n,"d","d^3*moebius($n/d)")
         == jordan_totient(3,$n);
 
+  if ($n > 2) {
+    for (1..10) {
+      my $k;  do { $k = int(rand(10)) } while !($k % $n);
+      die "binomial($n,$k)" unless Math::Pari::binomial($n,$k) == binomial($n,$k);
+      my $negn = - ($n >> 1);
+      die "binomial($negn,$k)" unless Math::Pari::binomial($negn,$k) == binomial($negn,$k);
+    }
+  }
+
   # TODO: exp_mangoldt:
   # Lambda(n)={
   #   v=factor(n);
@@ -209,7 +235,6 @@ while (1) {
   # TODO: carmichael lambda?  Pari doesn't have it.
 
   { my $m = int(rand($n-1));
-    my $mn = PARI "Mod($m,$n)";
     my $invmod = invmod($m, $n);
     if (defined $invmod) {
       die "invmod($m, $n)" unless Math::Pari::lift(PARI "Mod(1/$m,$n)") == $invmod;

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