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.9.0

🧮 Persistent interactive mode


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
diffsquare

# 🔹 Provide a decimal modulus
diffsquare -n 179769313486231590772930519078902473361797697894230657273430081157732675805505620686985379449212982959585501387537164015710139858647833778606925583497541085196591615128057575940752635007475935288710823649949940771895617054361149474865046711015101563940680527540071584560878577663743040086340742855278549092581

# 🔹 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

# 🔹 Factor 2^32 + 1 (Fermat number F5) from piped input
echo "2^32 + 1" | bc | diffsquare

# 🔹 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

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 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 for batch factorization (--stdin / --input) (default: logical CPUs)
  --output Output results to file
  --timeout Timeout in milliseconds for each factorization
-h --help Show usage help
-v --version Show version

Tags

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