# Forum: JRuby [ANN] "primes-utils" rubygem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
on 2015-04-03 05:46
```"primes-utils" is a Rubygem which provides a suite of extremely fast
(relative to Ruby's standard library) utility methods for testing and
generating primes.

Install it the usual way:

\$ gem install primes-utils

Then require inside ruby as:

> require 'primes/utils'

The suite consists of the following methods:

1)prime?
Determine if the absolute value of an integer is prime.  Return 'true'
or 'false'.
This replaces the `prime?` method  in the `prime.rb` standard library.

2)primemr?(k=20)
Determine if the absolute value of an integer is prime using
Miller-Rabin test.  Return 'true' or 'false'.
Miller-Rabin here is super fast, but probabilistic (not deterministic),
primality test.
https://en.wikipedia.org/wiki/Miller-Rabin_primality_test
The method's reliability can be increased by increasing the default
input parameter of k=20.

3)factors(p=13) or prime_division(p=13)
Determine the prime factorization of the absolute value of an integer.
This replaces the `prime division` method in the `prime.rb` standard
library.
Returns an array of arrays of factors and exponents: [[2,4],[3,2],[5,1]]
=> (2^4)(3^2)(5^1) = (16)(9)(5) = 720
Default Strictly Prime (SP) Prime Generator (PG) used here is P13.
Can change SP PG used on input. Acceptable primes range (3 - 19).

4)primes(start_num=0)
Create an array of primes from the absolute value range (|start_num| -
|end_num|).
The order of the range doesn't matter if both given:  start.primes end
<=> end.prime start
If only one parameter used, then all the primes upto that number will be
returned.

5)primenth(p=11) or nthprime(p=11)
Return the value of the nth (absolute value) prime.
Default Strictly Prime (SP) Prime Generator (PG) used here is P11.
Can change SP PG used on input. Acceptable primes range (3 - 19).

Coding Implementations
The methods `primemr`, `nthprime/primenth`, and `primes` are coded in
pure ruby. The methods `prime?` and `prime_division/factors` have two
implementations. Each has a pure ruby implementation, and also a hybrid
implementation which uses the Unix cli command `factor` if its available
on the host OS. `factor` [5] is an extremely fast C coded factoring
algorithm, part of the GNU Core Utilities package [4].

Upon loading, the gem tests if the desired `factor` command exists on
the host OS. If so, it wraps a system call to it and uses it for
`prime?` and `prime_division/factors`. If not, it uses a fast pure ruby
implementation for each method based on the Sieve of Zakiya
(SoZ)[1][2][3].

References
[1]https://www.scribd.com/doc/150217723/Improved-Prim...
[2]https://www.scribd.com/doc/228155369/The-Segmented...
[3]https://www.scribd.com/doc/73385696/The-Sieve-of-Zakiya
[4]https://en.wikipedia.org/wiki/GNU_Core_Utilities
[5]https://en.wikipedia.org/wiki/Factor_(Unix)

Author
Jabari Zakiya```
on 2015-05-25 19:42
```Jabari Z. wrote in post #1171449:
> "primes-utils" is a Rubygem which provides a suite of extremely fast
> (relative to Ruby's standard library) utility methods for testing and
> generating primes.
>
> Install it the usual way:
>
>     \$ gem install primes-utils
>
> Then require inside ruby as:
>
>     > require 'primes/utils'
>

Version 2.1.0 now available.

Added new methods primesf, primesmr, primescnt, primescntf, primescntmr.
All methods significantly faster, more memory efficient, and can work
with larger numbers.

https://rubygems.org/gems/primes-utils

https://github.com/jzakiya/primes-utils```
on 2015-06-20 01:14
```Friday, June 19, 2015
Now available, primes-utils 2.2.0, the Juneteenth release:
(https://en.wikipedia.org/wiki/Juneteenth).

New in 2.2.0
Refactored methods `primes`, `primescnt`, `primenth|nthprime`.

Changed default PGs on some methods to significantly increase speed.

Implemented mem error handling for `primes`, `primescnt`, `primenth` to
gracefully fail with informative error messages.

Upon failure methods return `nil` value.

Increased to 1.6 billion, indexed nth primes used in `primenth` to
create ranges to find nth prime within, extending max possible nth
prime.

Removed max nth prime ceiling. Only limitations now are available memory
and time.

installing gems.```
on 2015-07-01 19:30
```Wednesday, July 1, 2015

Now available, primes-utils 2.3.0

New in 2.3.0
`primescnt` can now find count of primes upto some N much faster and for
larger numbers.

Increased to over 2 billionth, indexed nth primes used in `primenth`,
and now `primescnt`, to create ranges to find nth prime within,
extending
max possible nth prime.

Under the hood, more code DRYing, cleanups, refactoring, and added
capability to one private method.

Further progress on Primes-Utils Handbook.```
on 2015-10-23 23:42
```Friday, October 23, 2015

Now available, primes-utils 2.4.0

New in 2.4.0
Fixed edge case algorithm error affecting `primes`, `primescnt`, and
`primenth|nthprime` with better, faster algorithm and code.

More code DRYing and cleanups.

Further progress on PRIMES-UTILS HANDBOOK, almost done.```
on 2015-12-02 18:18
```Wednesday, December 2, 2015

Now available, primes-utils 2.5.0

New in 2.5.0
Better adaptive Prime Generator selection algorithm creates speed
increases for large ranges for methods `primes`, `primescnt`,
and`primenth|nthprime`.

More code DRYing and cleanups.

PRIMES-UTILS HANDBOOK: The Math and Code behind making the Rubygem

https://www.scribd.com/doc/266461408/Primes-Utils-Handbook```
on 2015-12-14 22:16
```Monday, December 14, 2015

Now available, primes-utils 2.6.0

New in 2.6.0
Much, much better adaptive Prime Generator selection algorithm now used.
Significant speed increases across most start values and range sizes for
methods `primes`, `primescnt`, and`primenth|nthprime`.

Code, and changes, documented in current HANDBOOK ver 2015/12/14.

PRIMES-UTILS HANDBOOK: The Math and Code behind making the Rubygem

https://www.scribd.com/doc/266461408/Primes-Utils-Handbook```
on 2015-12-28 17:31
```Monday, December 28, 2015

Now available, primes-utils 2.7.0

New in 2.7.0
Better adaptive selection algorithm to select PGs within a range.

Code, and changes, documented in current HANDBOOK ver 2015/12/19.