Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2025-07-21
Added
Core Algorithm: Fermat primality test implementation
- Probabilistic testing with 100 random bases
- Efficient modular exponentiation using square-and-multiply algorithm
- Edge case handling for numbers 1 and 2
- Integration with LehmerGcd for coprimality testing
Main Functions:
FermatPrimalityTest.of/1
- Main primality test functionFermatPrimalityTest.mod_pow/3
- Modular exponentiation implementation
Documentation:
- Comprehensive module documentation with mathematical background
- Detailed function documentation with examples
- Type specifications (@spec) for better tooling support
- Professional README with usage examples and algorithm explanations
Development Tools:
- Credo configuration for static analysis
- Dialyzer setup for type checking
- Spellweaver integration for documentation quality
- ExDoc configuration with KaTeX math rendering
- Comprehensive test suite
Project Structure:
- Apache 2.0 license
- Professional README with installation and usage instructions
- Development workflow with
mix check
alias - Package metadata for Hex.pm publishing
- Initial project structure and setup
- Comprehensive documentation with mathematical formulas
- Quality assurance tooling (Credo, Dialyzer, Spellweaver)
- KaTeX integration for mathematical formula rendering
Technical Details
Algorithm Implementation
Fermat Primality Test: Based on Fermat's Little Theorem
- Time Complexity: $O(k \log n)$ where $k = 100$
- Space Complexity: $O(1)$
- Accuracy: No false negatives, extremely low false positive rate
Modular Exponentiation: Square-and-multiply algorithm
- Time Complexity: $O(\log exp)$
- Space Complexity: $O(1)$
- Handles edge cases (zero exponent, negative exponent)
Mathematical Foundation
- Implements Fermat's Little Theorem: $a^{p-1} \equiv 1 \pmod{p}$
- Uses contrapositive for composite number detection
- Handles Fermat pseudoprimes and Carmichael numbers
- Probabilistic approach with 100 random bases
Quality Assurance
- Static Analysis: Credo with custom rules
- Type Checking: Dialyzer with ignore file
- Documentation: ExDoc with KaTeX math rendering
- Spell Checking: Spellweaver with technical terms
- Code Formatting: Mix format integration
Dependencies
- Development: ex_doc, dialyxir, credo, spellweaver, nstandard
- Runtime: nstandard (for LehmerGcd integration)
Breaking Changes
None - This is the initial release.
Deprecations
None - This is the initial release.
Version History
[1.0.0] - 2025-07-21 - Initial Release
- Complete Fermat primality test implementation
- Comprehensive documentation with mathematical formulas
- Professional development tooling and quality assurance
- Full project structure with license, README, and metadata
Release Notes
Version 1.0.0
This is the initial stable release of the Fermat Primality Test library. The implementation provides a robust, well-documented probabilistic primality test suitable for educational and research purposes.
Key Features:
- Efficient probabilistic primality testing
- Comprehensive mathematical documentation
- Professional development tooling
- Type-safe implementation with Dialyzer support
Use Cases:
- Educational demonstrations of Fermat's Little Theorem
- Research and experimentation with primality testing
- Learning probabilistic algorithms
- Mathematical library development
Limitations:
- Probabilistic nature (not deterministic)
- May have false positives for very large numbers
- Not suitable for cryptographic applications requiring deterministic tests
Contributing
When adding new features or making changes, please update this changelog following the Keep a Changelog format.
Changelog Entry Format
## [Version] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes in existing functionality
### Deprecated
- Soon-to-be removed features
### Removed
- Removed features
### Fixed
- Bug fixes
### Security
- Vulnerability fixes