Compare commits
4 Commits
be3fd52cfa
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 084aa14026 | |||
| 966574dd1f | |||
| 41bc18a17c | |||
| 5dde94ae8c |
41
README.md
41
README.md
@@ -1,38 +1,29 @@
|
||||
# Indivisible
|
||||
|
||||
Indivisible is an optimized prime number generator and tester written in Rust.
|
||||
Indivisible is an optimized prime number generator and tester.
|
||||
|
||||
## Build & Installation
|
||||
|
||||
To build the project you will require the Rust compiler and build
|
||||
system, `cargo`. At which point you simply run `cargo build` in the root
|
||||
directory of the project. To create an optimized release build append
|
||||
the `--release` flag to the previous command.
|
||||
Build a binary release using the following command:
|
||||
|
||||
Once a release build has been compiled, you may install Indivisible and
|
||||
the manpage documentation by running the `install` script. In a similar
|
||||
manner, you can run the `uninstall` script to remove the previously
|
||||
installed binary and documentation.
|
||||
```console
|
||||
$ cargo build -r
|
||||
```
|
||||
|
||||
## Usage
|
||||
Once compiled, you can install it using the `install` script. By default this
|
||||
will install to `/usr/local/{bin,share}`, but you can optionally change the
|
||||
`PREFIX` used as follows:
|
||||
|
||||
The purpose of Indivisible is to find the nth prime and all the primes
|
||||
before it. The basic usage is `indivisible <n>` where `n` is the ordinal
|
||||
of the prime you'd like to find. To display all primes before `n`, you
|
||||
can run verbose mode by using the `--verbose` or simply `-v` option.
|
||||
```console
|
||||
$ PREFIX="~/.local" ./install
|
||||
```
|
||||
|
||||
Since Indivisible generates primes using previously computed primes, you
|
||||
can also import prime numbers previously computed with the `--import` or
|
||||
`-i` option. To store already computed primes you are expected to use
|
||||
piping like any UNIX user would expect. Here is an example:
|
||||
Additionally there is an `uninstall` script available. If you have used a custom
|
||||
`PREFIX` this must also be specified to uninstall in the same manner. To see
|
||||
where you've installed it you can always use the following command:
|
||||
|
||||
```bash
|
||||
# store first 100 primes in ./primes
|
||||
indivisible -v 100 > ./primes
|
||||
# appends next 400 primes
|
||||
indivisible -i ./primes -v 500 >> ./primes
|
||||
# display the 600th prime
|
||||
indivisible -i ./primes 600
|
||||
```console
|
||||
$ which indivisible
|
||||
```
|
||||
|
||||
## Legacy
|
||||
|
||||
25
benchmark.sh
25
benchmark.sh
@@ -1,9 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
BIN="./target/release/indivisible"
|
||||
EXE="./target/release/indivisible"
|
||||
OPTIONS=()
|
||||
TRIALS=20
|
||||
|
||||
if ! [ -f "$BIN" ]
|
||||
if ! [ -f "$EXE" ]
|
||||
then
|
||||
>&2 echo "Release build not available. Please run 'cargo build -r'."
|
||||
exit 1
|
||||
@@ -15,11 +16,27 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Calculating primes up to 100,000,000"
|
||||
while getopts "t:s:" opt
|
||||
do
|
||||
case "$opt" in
|
||||
s)
|
||||
OPTIONS=("${OPTIONS[@]}" -s "$OPTARG")
|
||||
;;
|
||||
t)
|
||||
TRIALS="$OPTARG"
|
||||
;;
|
||||
*)
|
||||
>&2 echo "Uknown option $opt"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "Calculating primes up to 1,000,000,000"
|
||||
TOTAL="0"
|
||||
for _ in $(seq "$TRIALS")
|
||||
do
|
||||
TIME=$(command time -f "%e" "$BIN" 100000000 2>&1 >/dev/null)
|
||||
TIME=$(command time -f "%e" "$EXE" "${OPTIONS[@]}" 1000000000 2>&1 >/dev/null)
|
||||
TOTAL=$(calc "$TOTAL + $TIME")
|
||||
done
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ struct Opt {
|
||||
test:bool,
|
||||
#[structopt(help = "Max of the prime to generate or number to test for primality")]
|
||||
num:usize,
|
||||
#[structopt(short, long, name = "SIZE", default_value = "1000", help = "Set a custom sieve size")]
|
||||
#[structopt(short, long, name = "SIZE", default_value = "10485760", help = "Set a custom sieve size")]
|
||||
sieve:usize,
|
||||
//#[structopt(short, long, name = "n", default_value = "1", help = "Number of threads to spawn")]
|
||||
//jobs:u64,
|
||||
|
||||
Reference in New Issue
Block a user