diffsquare

Crates.io Crates.io Downloads Docs.rs License


From the Author

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.

Recent Update – v0.4.0

New in v0.4.0: feat(cli): support multiple inputs via –stdin for batch factorization


Key Features

diffsquare is a fast and lightweight CLI utility for factoring large integers using Fermat’s Difference of Squares method.

GitHub Repository: diffsquare


Installation

Install via Cargo:

cargo install diffsquare

Ensure $HOME/.cargo/bin is in your PATH:

export PATH="$HOME/.cargo/bin:$PATH"

Build Instructions

To build from source manually:

git clone https://github.com/Abhrankan-Chakrabarti/diffsquare.git
cd diffsquare
cargo build --release

🔧 Usage Examples

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

Command-Line Flags

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

Tags #RustLang #NumberTheory #OpenSource #BigInteger #Cryptography #Fermat #AbhrankanChakrabarti #Malachite