README

March 13, 2026 ยท View on GitHub

Math::Prime::Util version 0.75

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); # 210002^{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.