README
primes-generator
About
This prime number generator combines performance of Sieve of Eratosthenes algorithm with the maximum memory efficiency. It was designed to be RXJS-friendly, and well suited for web app-s.
- See WiKi to help decide which generator to use.
- Other resources: tests and benchmarks.
Installation
$ npm i primes-generator
Usage
Follow the usage examples below, based on your development environment.
JavaScript
Generating an array with the first 10 primes:
const {generatePrimes, stopOnCount} = require('primes-generator');
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 'primes-generator';
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 'primes-generator';
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 'primes-generator';
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%
Work-in-progress:
nthPrime(n)
- returns prime from index (not implemented yet)nthPrimeApprox
- returns approximate prime from index (not implemented yet)
Helpers for iterators:
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