primes-generatordeprecated

Prime-number generators, using Sieve of Eratosthenes

Usage no npm install needed!

<script type="module">
  import primesGenerator from 'https://cdn.skypack.dev/primes-generator';
</script>

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.

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 generator
  • generatePrimes({start: x}) - efficiency-focused, infinite prime generator, starting from x
  • generatePrimes({boost: n}) - performance-focused prime generator, for up to n primes

Popular prime functions:

  • isPrime(x) - verifies if x is a prime number
  • countPrimes(x) - precise primes counter, up to x, using Meissel Lehmer algorithm
  • countPrimesApprox(x) - instant primes counter, up to x, 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, once count has been reached
  • stopOnValue(iterator, maxValue) - stops the iterator when maxValue is exceeded
  • stopWhen(iterator, cb) - stops the iterator when the callback returns a truthy value