This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.13 in repository libmath-prime-util-perl.
commit 78e0015bf645821c34852cfc31cb0f4f2f4dff63 Author: Dana Jacobsen <d...@acm.org> Date: Thu Aug 2 16:54:11 2012 -0600 Add primorial and pn_primorial --- Changes | 18 ++++++++----- TODO | 10 +++----- lib/Math/Prime/Util.pm | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 12 deletions(-) diff --git a/Changes b/Changes index 25ac83c..121f279 100644 --- a/Changes +++ b/Changes @@ -1,14 +1,20 @@ Revision history for Perl extension Math::Prime::Util. -0.12 30 July 2012 - - Add RiemannZeta function. We used this before for Riemann R, but now - it is exported and should be accurate for small numbers (it was only - used for integers > 40 before). - - add prime_set_config(), including ability to set assume_rh to let all - functions assume the Riemann Hypothesis. +0.12 2 August 2012 + - Add: + primorial product of primes <= n + pn_primorial product of first n primes + prime_set_config set config options + RiemannZeta export and make accurate for small reals + + - Add 'assume_rh' configuration option (default: false) which can be set + to allow functions to assume the Riemann Hypothesis. + - Use the Schoenfeld bound for Pi(x) (x large) if assume_rh is true. + - valgrind testing + 0.11 23 July 2012 - Turn off threading tests on Cygwin, as threads on some Cygwin platforms give random panics (my Win7 64-bit works fine, XP 32-bit does not). diff --git a/TODO b/TODO index 9e91c36..4b7b42d 100644 --- a/TODO +++ b/TODO @@ -2,8 +2,6 @@ - Examine behavior near 32-bit limit on 32-bit machines. (done for factoring) -- GMP versions of all routines. - - segment sieve should itself use a segment for its primes. Today we'd need sqrt(2^64) max = 140MB. Segmenting would yield under 1MB. @@ -15,10 +13,6 @@ - Faster SQUFOF -- better prime count upper/lower bounds: - - Dusart 2010 "Estimates of Some Functions Over Primes without R.H." - - Schoenfeld or Stoll for with-RH limits - - Move .c / .h files into separate directory. version does it in a painful way. Something simpler to be had? @@ -26,3 +20,7 @@ - After the factoring changes, we need to use Devel::Cover again to ferret out numbers that pass the early tests. + +- tests for primorial + +- document prime_set_config diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm index 3bff7b5..921441a 100644 --- a/lib/Math/Prime/Util.pm +++ b/lib/Math/Prime/Util.pm @@ -22,6 +22,7 @@ our @EXPORT_OK = qw( prime_count prime_count_lower prime_count_upper prime_count_approx nth_prime nth_prime_lower nth_prime_upper nth_prime_approx random_prime random_ndigit_prime random_nbit_prime random_maurer_prime + primorial pn_primorial factor all_factors moebius euler_phi ExponentialIntegral LogarithmicIntegral RiemannZeta RiemannR ); @@ -634,6 +635,28 @@ sub primes { } } +sub primorial { + my $n = shift; + _validate_positive_integer($n); + + return Math::Prime::Util::GMP::primorial($n) + if $_HAVE_GMP && defined &Math::Prime::Util::GMP::primorial; + + my $pn = 1; + $pn = Math::BigInt->new->bone if defined $bigint::VERSION && + $n >= (($_Config{'maxbits'} == 32) ? 29 : 53); + + foreach my $p ( @{ primes($n) } ) { + $pn *= $p; + } + return $pn; +} + +sub pn_primorial { + return primorial( nth_prime($_[0]) ); +} + + sub all_factors { my $n = shift; my @factors = factor($n); @@ -1335,6 +1358,11 @@ Version 0.12 # Moebius function used to calculate Mertens $sum += moebius($_) for (1..200); say "Mertens(200) = $sum"; + # The primorial n# (product of all primes <= n) + say "15# (2*3*5*7*11*13) is ", primorial(15); + # The primorial p(n)# (product of first n primes) + say "P(9)# (2*3*5*7*11*13*17*19*23) is ", pn_primorial(9); + # Ei, li, and Riemann R functions my $ei = ExponentialIntegral($x); # $x a real: $x != 0 my $li = LogarithmicIntegral($x); # $x a real: $x >= 0 @@ -1695,6 +1723,44 @@ C<n E<lt> 1>. This follows the logic used by SAGE. Mathematic/WolframAlpha also returns 0 for input 0, but returns C<euler_phi(-n)> for C<n E<lt> 0>. +=head2 primorial + + $prim = primorial(11); # 11# = 2*3*5*7*11 = 2310 + +Returns the primorial C<n#> of the positive integer input, defined as the +product of the prime numbers less than or equal to C<n>. This is the +L<OEIS series A034386|http://oeis.org/A034386>: primorial numbers second +definition. + + primorial(0) == 1 + primorial($n) == pn_primorial( prime_count($n) ) + +The result will be calculated using native numbers if neither bigint nor +L<Math::Prime::Util::GMP> are loaded. + +Be careful about which version (C<primorial> or C<pn_primorial>) matches the +definition you want to use. Not all sources agree on the terminology, though +they should give a clear definition of which of the two versions they mean. +OEIS, Wikipedia, and Mathworld are all consistent, and these functions should +match that terminology. + + +=head2 pn_primorial + + $prim = pn_primorial(5); # p_5# = 2*3*5*7*11 = 2310 + +Returns the primorial number C<p_n#> of the positive integer input, defined as +the product of the first C<n> prime numbers (compare to the factorial, which +is the product of the first C<n> natural numbers). This is the +L<OEIS series A002110|http://oeis.org/A002110>: primorial numbers first +definition. + + pn_primorial(0) == 1 + pn_primorial($n) == primorial( nth_prime($n) ) + +The result will be calculated using native numbers if neither bigint nor +L<Math::Prime::Util::GMP> are loaded. + =head2 random_prime @@ -2220,6 +2286,8 @@ excellent versions in the public domain). =item Douglas A. Stoll and Patrick Demichel , "The impact of ζ(s) complex zeros on π(x) for x E<lt> 10^{10^{13}}", Mathematics of Computation, v80, n276, pp 2381-2394, October 2011. L<http://www.ams.org/journals/mcom/2011-80-276/S0025-5718-2011-02477-4/home.html> +=item L<OEIS: Primorial|http://oeis.org/wiki/Primorial>. + =back -- 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