Math::Prime::Util version 0.74

A comprehensive number theory module for Perl, also available as "ntheory".
It provides over 370 functions covering:

  - Prime sieving, generation, and iteration
  - Primality testing (BPSW, Miller-Rabin, Lucas, Frobenius, AKS) and proving
  - Integer factoring (trial, Pollard rho, p-1, p+1, SQUFOF, ECM)
  - Prime counting: exact (Lehmer/LMO), bounds, and approximations
  - Nth prime, twin primes, almost primes, semiprimes
  - Random prime generation (cryptographic CSPRNG)
  - Combinatorics: binomial, factorial, Stirling, partitions, permutations
  - Multiplicative functions: euler_phi, moebius, divisor_sum, liouville, etc.
  - Modular arithmetic: powmod, sqrtmod, chinese (CRT), znorder, znlog
  - Integer arithmetic: addint, mulint, divint, powint, etc. (arbitrary size)
  - Special functions: Riemann zeta, R, Li, Lambert W, Chebyshev theta/psi
  - Iterators: forprimes, forcomposites, fordivisors, forcomb, forpart, etc.
  - Integer set operations: union, intersection, minus, delta, sumset, etc.

Performance-critical code is written in C (XS).  A pure Perl backend is
included for portability.  For bignum inputs, installing the optional
Math::Prime::Util::GMP module gives a large additional speedup.

The default sieving and factoring are intended to be the fastest on CPAN,
and are faster than Math::Prime::XS, Math::Prime::FastSieve,
Math::Factor::XS, Math::Big, Math::Factoring, Math::Primality, and
Crypt::Primes.  For native-size integers it is typically faster than
Math::Pari.  With Math::Prime::Util::GMP installed it is usually faster
than Math::Pari for bigints as well.


SYNOPSIS

  use Math::Prime::Util qw/:all/;
  # or:  use ntheory qw/:all/;

  # Sieving and iteration
  my $aref  = primes(100_000_000);            # array ref of primes
  my @twins = @{ twin_primes(1000, 2000) };   # twin primes in range
  forprimes { say } 1e6, 1e6+1000;            # iterate over primes

  # Primality
  say is_prime(1000000007) ? "prime" : "composite";
  say is_provable_prime($n) ? "proven prime" : "not prime";

  # Factoring
  my @factors = factor(1234567890);
  my @fexp    = factor_exp("290375823984720394875209384750932");

  # Prime counting
  say prime_count(1e11);                      # exact: 4118054813
  say prime_count_approx(int(1e18));          # fast approximation

  # Number-theoretic functions
  say euler_phi(240);                         # 64
  say moebius(30);                            # -1
  say carmichael_lambda(1002);                # 166

  # Modular arithmetic
  say powmod(2, 1000, 1009);                  # 2^1000 mod 1009
  say chinese([14,643], [254,419]);           # CRT
  say znorder(2, 1009);                       # multiplicative order

See the POD documentation for full details on all functions:
  perldoc Math::Prime::Util


INSTALLATION

To install this module:

   perl Makefile.PL
   make
   make test
   make install

You will need a C compiler compatible with the compiler used to build Perl.
Since the routines are meant to be used from Perl, the data types will match
the ones used with the Perl you are installing for.  This means a 32-bit Perl
running on a 64-bit machine will result in a 32-bit library.


DEPENDENCIES

Perl 5.6.2 or later (5.8 or later is preferred).

C89 compiler, 32-bit or 64-bit.

Optional: Math::Prime::Util::GMP for faster bignum operations.


COPYRIGHT AND LICENCE

Copyright (C) 2011-2026 by Dana Jacobsen <dana@acm.org>

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
