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.4.0: feat(cli): support multiple inputs via –stdin for batch factorization
diffsquare
is a fast and lightweight CLI utility for factoring large integers using Fermat’s Difference of Squares method.
-q
) disables interactive prompts and hides intermediate output — useful for piping or scripting.--json
) for scripting and automation.--time-only
flag for displaying only the execution time (useful for benchmarking).--stdin
to read multiple newline-separated numbers from standard input (e.g., via piping or redirection).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, iteration, and precision
diffsquare
# 🔹 Provide a decimal modulus
diffsquare -n 17976931348623159077293051907890247336179769789423065727343008115
# 🔹 Provide a hexadecimal modulus
diffsquare -n 0xDEADBEEFCAFEBABE1234567890
# 🔹 Specify starting iteration (modulus still required)
diffsquare -n 0xC0FFEE123456789 -i 1000000
# 🔹 Use custom precision for verbose scientific output
diffsquare -n 0xABCD1234 -p 30
# 🔹 Combine all options and suppress output (precision not required in quiet mode)
diffsquare -n 0xCAFED00D1234 -i 50000 -q
# 🔹 JSON output for scripting and automation
diffsquare -n 0xC0FFEE123456789 --json
# 🔹 Show only execution time (no output of factors)
diffsquare -n 0xCAFED00D1234 --time-only
# 🔹 Check installed version
diffsquare --version
# 🔹 ♻️ Batch factorization from standard input (stdin)
# Example: echo or cat piped into the CLI
echo -e "2761929023323646159\n3189046231347719467" | diffsquare --stdin
# Example: cat a file or redirect any input to stdin
cat numbers.txt | diffsquare --stdin
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 |
Print result as JSON (suppresses all other output) | |
--time-only |
Display only the execution time (useful for benchmarking) | |
--stdin |
Read newline-separated numbers from standard input | |
-h |
--help |
Show usage help |
-v |
--version |
Show version |
Tags
#RustLang
#NumberTheory
#OpenSource
#BigInteger
#Cryptography
#Fermat
#AbhrankanChakrabarti
#Malachite