prime-lib
v0.5.0
Published
Prime number library
Downloads
11
Maintainers
Readme
prime-lib
About
Popular prime number functions, implemented in TypeScript, with focus on memory efficiency and performance, to be friendly for Web apps, and RXJS in particular.
It features many well-known optimization methods, such as Sieve of Eratosthenes, Meissel Lehmer, etc.
See the following resources:
- API - all available functions
- WiKi - to help choose a prime generator
- Benchmarks - to see the performance
Installation
$ npm i prime-lib
Usage
Follow the usage examples below, based on your development environment.
JavaScript
Generating an array with the first 10 primes:
const {generatePrimes, stopOnCount} = require('prime-lib');
const i = generatePrimes(); // create infinite primes iterator
const s = stopOnCount(i, 10); // stop-iterator after 10 values
const values = [...s]; // 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
TypeScript
Generating an array of all primes up to 17:
import {generatePrimes, stopOnValue} from 'prime-lib';
const i = generatePrimes(); // create infinite primes iterator
const s = stopOnValue(i, 17); // stop-iterator when value reaches 17
const values = [...s]; // 2, 3, 5, 7, 11, 13, 17
RXJS
Adding a reusable RXJS wrapper first:
import {Observable, from} from 'rxjs';
import {generatePrimes, IPrimeOptions} from 'prime-lib';
export function primes(options?: IPrimeOptions): Observable<number> {
return from(generatePrimes(options));
}
- Generating the first 10 primes:
import {take} from 'rxjs';
primes().pipe(take(10))
.subscribe(prime => {
// 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
});
- Generating 10 primes after 100:
import {take} from 'rxjs';
primes({start: 100}).pipe(take(10))
.subscribe(prime => {
// 101, 103, 107, 109, 113, 127, 131, 137, 139, 149
});
- Maximum-performance, buffered primes generation:
primes({boost: 10})
.subscribe(prime => {
// 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
});
- Detecting primes in another sequence:
import {range, filter} from 'rxjs';
import {isPrime} from 'prime-lib';
range(0, 20).pipe(filter(a => isPrime(a)))
.subscribe(prime => {
// 2, 3, 5, 7, 11, 13, 17, 19
});
API
Prime generators:
generatePrimes()
- efficiency-focused, infinite prime generatorgeneratePrimes({start: x})
- efficiency-focused, infinite prime generator, starting fromx
generatePrimes({boost: n})
- performance-focused prime generator, for up ton
primes
Popular prime functions:
isPrime(x)
- verifies ifx
is a prime numbercountPrimes(x)
- precise primes counter, up tox
, using Meissel Lehmer algorithmcountPrimesApprox(x)
- instant primes counter, up tox
, with error margin < 1%primeFactors(x)
- calculates prime factorization
Work-in-progress:
nthPrime(n)
- returns prime from index (not implemented yet)nthPrimeApprox(n)
- returns approximate prime from index (not implemented yet)
Extra helpers:
cachePrimes(n)
- creates a gap-compressed cache ofn
primes (see WiKi)stopOnCount(iterator, count)
- stops the iterator, oncecount
has been reachedstopOnValue(iterator, maxValue)
- stops the iterator whenmaxValue
is exceededstopWhen(iterator, cb)
- stops the iterator when the callback returns a truthy value