7 releases
0.1.6 | Oct 4, 2022 |
---|---|
0.1.5 | Oct 4, 2022 |
0.1.3 | Sep 28, 2022 |
#974 in Math
25KB
365 lines
P-adic numbers
A collection of tools for p-adic numbers in Rust.
This includes a p-adic type and a rational type.
P-adic notation for the expansion is currently left to right.
Status
This library is currently in development and might be unstable.
Usage
Add this to your Cargo.toml
:
[dependencies]
padic = "0.1.6"
use padic::Ratio;
let ratio = Ratio::new(2, 5);
let padic = r.to_padic(3, 12);
assert_eq!(padic.valuation, 0);
assert_eq!(padic.expansion, vec![1, 1, 2, 1, 0, 1, 2, 1, 0, 1, 2, 1]);
assert_eq!(padic.expansion_cycle(), [1, 2, 1, 0]);
assert_eq!(padic.to_string(), "... 1 2 1 0 1 2 1 0 1 2 1 1");
Helpers functions
- Prime factors with multiplicity (a: i64 / b: i64) -> Vec<(prime: u64, exp: u64)>
- Extended Euclidean algorithm with Bezout coefficients
- Modular multiplicative inverse
- Double cursor window cycle detection for repeating digits in p-adic expansion
Resources
TODOs
Ratio
- Extract sign information to transform ratio into a tuple of unsigned integer variables
- Reduce ratio to lowest terms using extended Euclidean algorithm
- Basic arithmetic operations for rational numbers
- Modular multiplicative inverse using EGCD
- Implement extended greatest common divisor to extract Bezout coefficients
P-adic
- Prime decomposition returning vector of (prime, exponent) tuples.
- P-adic valuation of rational number
- P-adic norm of rational number
- P-adic expansion of rational number with given precision
- P-adic string representation with given precision and given valuation
- Cyclic detection in p-adic expansion (Sliding window algorithm)
- P-adic arithmetic operations
- Convert p-adic expansion into rational number
Bugs / Features
- If the valuation is larger than the precision, the expansion is not correct
- If the precision is lower than the cycle length, the cycle is not detected
License
MIT