gyllois python interface
This commit is contained in:
parent
e7e393293a
commit
cb0bc911a4
|
@ -54,6 +54,7 @@ fn register_math_module(py: Python, parent_module: &PyModule) -> PyResult<()> {
|
|||
math_module.add_function(wrap_pyfunction!(math::pm1::py_p_minus_one, math_module)?)?;
|
||||
math_module.add_function(wrap_pyfunction!(math::gcd::gcd, math_module)?)?;
|
||||
math_module.add_function(wrap_pyfunction!(math::gcd::egcd, math_module)?)?;
|
||||
math_module.add_function(wrap_pyfunction!(math::gcd::alt_egcd, math_module)?)?;
|
||||
math_module.add_function(wrap_pyfunction!(math::factorise::prime_factors , math_module)?)?;
|
||||
math_module.add_class::<math::gallois::GalloisFiled>()?;
|
||||
parent_module.add_submodule(math_module)?;
|
||||
|
|
|
@ -375,5 +375,10 @@ fn test_gallois_inverse() {
|
|||
assert_eq!(field.inverse(54).unwrap(), 20);
|
||||
assert!(field.inverse(0).is_err());
|
||||
|
||||
let field = GalloisFiled::new(1151, true);
|
||||
assert_eq!(field.inverse(6).unwrap(), 14);
|
||||
assert_eq!(field.inverse(54).unwrap(), 20);
|
||||
assert!(field.inverse(0).is_err());
|
||||
|
||||
// TODO add a test for a field that has a non prime base
|
||||
}
|
||||
|
|
|
@ -23,6 +23,32 @@ pub fn egcd(mut a: u128, mut b: u128) -> Vec<i128> {
|
|||
return vec![egcd.gcd, egcd.x, egcd.y]
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
/// own implementation of egcd
|
||||
pub fn alt_egcd(mut a: i128, mut b: i128, recursion: bool) -> Vec<i128> {
|
||||
if recursion && a > b {
|
||||
let tmp = a;
|
||||
a = b;
|
||||
b = tmp;
|
||||
}
|
||||
if a == 0 {
|
||||
return vec![b, 0, 1]
|
||||
}
|
||||
let v = alt_egcd(b % a, a, true);
|
||||
let mut result = vec![
|
||||
v[0],
|
||||
v[2] - (b.checked_div(a).unwrap()) * v[1],
|
||||
v[1],
|
||||
];
|
||||
return result;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_alt_gcd() {
|
||||
assert_eq!(egcd(12193, 123213), alt_egcd(12193, 123213, false));
|
||||
assert_eq!(egcd(52193, 123212), alt_egcd(52193, 123212, false));
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
/// euclidian algorithm
|
||||
pub fn gcd(a: u128, b: u128) -> u128 {
|
||||
|
|
Loading…
Reference in New Issue