7 releases

0.1.6 Oct 4, 2022
0.1.5 Oct 4, 2022
0.1.3 Sep 28, 2022

#1019 in Math

MIT license

25KB
365 lines

P-adic numbers

crate documentation minimum rustc 1.31

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

No runtime deps