npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

peo

v3.6.2

Published

Prime Exponent Object

Downloads

574

Readme

peo

Prime Exponent Object module containing Peo class. Find module on npm and code repo with examples on GitHub.

npm versionBuild status

A Prime Exponent Object (Peo) stores small or large rational numbers as an object of the form {p1:e1, p2:e2, ...}. A simple example would be 20/3 stored as {2:2, 3:-1, 5:1}.

This format aids multiplication and exponentiation of large numbers. Maximum prime factor size is approximately 10^15, so large factorial, primorial or combinatoric values can be made, e.g. factorial of 1000 or higher. Calculations on Peos via the API return new Peo objects in order to keep Peo instances immutable.

The class contains:

  • A central data store of these primes and exponents
  • Some cached data, e.g. numeric or text representations
  • An API with many functions to manipulate the Peo and return the result as a new Peo.

To install, use npm i peo. To test, npm test. For examples of usage see Github examples directory, via npm run examples. Limits of both prime (key) and exponent (value) are around 10^15.

API

General constructors using objects

new Peo({num:a, denom:b, pow:c})    // Peo for rational number (a/b)^c
new Peo({p1:e1, ...,pk:ek})         // get Peo for p1^e1 * ... * pk^ek  (keys are prime numbers)
new Peo({p1:e1, ...,pk:ek}, n)      // get Peo for (p1^e1 * ... * pk^ek) ^ n

Shorthand constructors

new Peo(a)         // integer a
new Peo(a, b)      // integers a, b => fraction a/b
new Peo(a, b, n)   // integers a, b, n => fraction (a/b) ^ n
new Peo(d)         // decimal d (find a fraction that approximates d)
new Peo(d, n)      // decimal d^n
new Peo(txt)       // txt an integer or fraction in text form e.g. "5", "3/2"
new Peo(txt, n)    // txt ^ n
new Peo(peo)       // Copies prime information in a peo into a new peo. Also see instance method copy()
new Peo(peo, n)    // peo ^ n

Static or Class methods

Peo.fact(n)          // returns n! = n * (n-1) * ... * 1        (Factorial function)
Peo.perm(n, r)       // returns n * (n-1) * ... * (n-(r-1))     (Permutation function)
Peo.binom(n, r)      // returns n choose r; perm(n, r)/fact(r)  (Binomial coefficient)
Peo.multSeq(n, r, j) // returns n * (n+j) * ... * (n+j(r-1))    (Multiply r terms of a sequence with jump j)
Peo.prim(a)          // returns product of primes from 1 and a  (Primorial function)
Peo.multPrimes(a, b) // returns product of primes from a and b  (Primes in given range)

Instance methods

Accessing prime exponents

peo.checkPrimeExps({p1:e1,...})  // returns Boolean if these prime exponents agree
peo.getPrimeExp(p)               // returns the exponent as a number
peo.getPrimeExps()               // returns a copy of all prime info {p1:e1,...}
peo.getPrimeExps([p1,...])       // returns a copy of prime info for specified primes only

General functions

peo.toString()  // returns a JSON object for the primes and exponents obtained via getPrimeExps()
peo.compress()  // removes all cached information, reducing size of peo. Use if you've got millions of peos.
peo.copy()      // returns a copy of the original peo. Cached information not transferred.
peo.construct() // anyPeo.construct(...args) should return Peo instance equivalent to new Peo(...args).
                // This allows any Peo instance to be used as a constructor.

Maths operations

peo.get1()               // returns a new identity Peo, e.g. new Peo(1)
peo.mult(m)              // returns a new Peo which is this * integer m
peo.mult(m, n)           // returns a new Peo which is this * integer m^n
peo.mult(dec)            // returns a new Peo which is this * decimal
peo.mult(dec, n)         // returns a new Peo which is this * decimal ^ power
peo.mult(otherPeo)       // returns a new Peo which is this * otherPeo  
peo.mult(otherPeo, n)    // returns a new Peo which is this * (otherPeo^n)
peo.pow(n)               // returns a new Peo which is this^n
peo.split(p1, [p2, p3])  // splits a Peo into an array of 3 components:
                         // [{p1:e1}, {p2:e2, p3:e3}, {everything else}]
                         // The argument list for .split is extensible and can contain
                         // primes or arrays of primes in any order.
// Unary comparisons
peo.is1()                   // Return true if peo equivalent to 1/1, false otherwise
peo.isNot1()                // Return false if peo equivalent to 1/1, true otherwise
peo.lessThan1()             // Return true if peo has log value < 0, false otherwise
peo.lessThanOrEqualTo1()    // Return true if peo has log value <= 0, false otherwise
peo.greaterThan1()          // Return true if peo has log value > 0, false otherwise
peo.greaterThanOrEqualTo1() // Return true if peo has log value >= 0, false otherwise
// Comparing the log values, rather than original value, means that peos of any size are handled correctly.

// Binary comparisons. Cases handled:
// 1. input is a Peo
// 2. input is a positive decimal number
peo.equals(input)               // Return true if peo = input, false otherwise
peo.notEquals(input)            // Return false if peo = input, true otherwise
peo.lessThan(input)             // Return true if peo < input, false otherwise
peo.lessThanOrEqualTo(input)    // Return true if peo <= input, false otherwise
peo.greaterThan(input)          // Return true if peo > input, false otherwise
peo.greaterThanOrEqualTo(input) // Return true if peo >= input, false otherwise

Numeric values

peo.getAsDecimal()       // returns a decimal representation of the Peo, if its not too big
peo.getAsFractionText()  // returns fraction text if num, denom < around 1e15. Otherwise return NA.
peo.getAsResultText()    // return fraction text, unless numbers are large, then return 10^NN.NN representation
peo.getNum()             // returns integer numerator of the fraction
peo.getDenom()           // returns integer denominator of the fraction

Logarithmic numeric values

peo.getLog(b)       // returns log of Peo to base b (if omitted, natural log)
peo.getLogNum(b)    // returns log of Peo numerator
peo.getLogDenom(b)  // returns log of Peo denominator

Numeric stats

peo.countUniquePrimeFactors() // returns the number of different prime factors of the Peo
peo.countPrimeFactors()       // returns the number of prime factors, with multiplicity
peo.countFactors()            // returns the total number of factors of the Peo
peo.getLowestPrime()          // returns the lowest prime in the Peo (* null for 1)
peo.getLowestExp()            // returns the lowest exponent in the Peo (*)
peo.getHighestPrime()         // returns the highest prime in the Peo (*)
peo.getHighestExp()           // returns the highest exponent in the Peo (*)
peo.getHighestAbsExp()        // returns the highest abs(exponent) in the Peo (*)
peo.getLiouville()            // returns the Liouville function on the Peo (-1 ^ countFactors)
peo.getMobius()               // returns the Mobius function on the Peo (-1 ^ countFactors if square-free, 0 otherwise)
peo.getBenedettiHeight()      // returns the Benedetti Height or the Complexity of the Peo; N x D when N/D is in lowest terms