Created by Abhrankan Chakrabarti, this project implements an efficient version of Fermat’s Difference of Squares method for factoring large integers. Written in Rust, it leverages the malachite
crate for high-performance arbitrary-precision arithmetic.
🚀 New in v0.7.0:
-
✅
--input <FILE>
flag- Allows reading newline-separated numbers from a specified file.
- Supports batch factorization of large input sets via file input.
- Fully compatible with
--json
,--csv
,--quiet
,--time-only
, and--output
modes. - Can be combined with
--threads
to enable parallel factorization.
-
✅ Thread pool configuration for batch input
--threads N
lets you control the number of Rayon threads for file or stdin input.- Improves performance tuning for large workloads.
-
🚀 Progress bar improvements
- Displays progress for file and stdin input when not in
--quiet
,--json
,--csv
, or--time-only
mode. - Cleaner and more informative progress display using
indicatif
.
- Displays progress for file and stdin input when not in
diffsquare
is a fast and lightweight CLI utility for factoring large integers using Fermat’s Difference of Squares method.
- Efficient Fermat's Difference of Squares factorization.
- Parallelized using
rayon
for faster factorization on multi-core systems (since v0.5.0). - Optional file input for batch factorization (
--input
) (new in v0.7.0). - Optional file output with
--output
to save results (since v0.6.0). - Control thread count for batch processing with
--threads
(new in v0.7.0). - Progress bar for file and stdin batch input (new in v0.7.0).
- Optional
--timeout N
to limit maximum time per factorization in milliseconds (since v0.6.1). - CSV output support via
--csv
flag (since v0.6.1). - JSON output mode (
--json
) for scripting and automation (since v0.3.0). - Quiet mode (
-q
) disables prompts and hides intermediate output — ideal for scripting. --time-only
flag for showing only execution time — useful for benchmarking (since v0.3.1).- Batch factorization via
--stdin
(since v0.4.0). - Support for decimal, hexadecimal, and scientific notation input.
- Command-line interface with interactive fallback.
- Optional control over iteration starting point (
--iter
) and precision (--prec
). - Scientific notation used in verbose mode for large integer readability.
- Execution time displayed after successful factorization.
GitHub Repository:
diffsquare
Install via Cargo:
cargo install diffsquare
Ensure $HOME/.cargo/bin
is in your PATH
:
export PATH="$HOME/.cargo/bin:$PATH"
To build from source manually:
git clone https://github.com/Abhrankan-Chakrabarti/diffsquare.git
cd diffsquare
cargo build --release
Run diffsquare
interactively or use flags for automation:
# 🔹 Fully interactive: prompts for modulus
diffsquare
# 🔹 Provide a decimal modulus
diffsquare -n 17976931348623159077293051907890247336179769789423065727343008115
# 🔹 Provide a hexadecimal modulus
diffsquare -n 0xDEADBEEFCAFEBABE1234567890
# 🔹 Specify starting iteration
diffsquare -n 0xC0FFEE123456789 -i 1000000
# 🔹 Use custom precision for verbose scientific output
diffsquare -n 0xABCD1234 -p 30
# 🔹 Quiet mode, suppress intermediate output
diffsquare -n 0xCAFED00D1234 -q
# 🔹 JSON output for scripting
diffsquare -n 0xC0FFEE123456789 --json
# 🔹 Show only execution time (for benchmarking)
diffsquare -n 0xCAFED00D1234 --time-only
# 🔹 Batch factorization from stdin
echo -e "2761929023323646159\n3189046231347719467" | diffsquare --stdin
# 🔹 Batch factorization from file input
diffsquare --input numbers.txt
# 🔹 Batch with threads and JSON output
diffsquare --input numbers.txt --threads 4 --json
# 🔹 Batch with CSV output and save to file
diffsquare --input numbers.txt --csv --output results.csv
Short | Long | Description |
---|---|---|
-n |
--mod |
Number to factor (supports 0x for hex or scientific notation) |
-i |
--iter |
Starting iteration value |
-p |
--prec |
Precision for verbose scientific output |
-q |
--quiet |
Suppress prompts and intermediate output |
--json |
Output result in JSON format | |
--csv |
Output result as CSV | |
--time-only |
Show only execution time | |
--stdin |
Read newline-separated input from stdin | |
--input |
Read newline-separated input from file | |
--threads |
Number of threads to use (default: 1) | |
--output |
Output results to file | |
--timeout |
Timeout in milliseconds for each factorization | |
-h |
--help |
Show usage help |
-v |
--version |
Show version |
Tags
#RustLang
#NumberTheory
#OpenSource
#BigInteger
#Cryptography
#Fermat
#AbhrankanChakrabarti
#Malachite