Function algebraic_equation_over_finite_prime_field::sqrt_over_mod_p[][src]

pub fn sqrt_over_mod_p<T>(a: T, p: &T) -> Option<T> where
    T: Sized + Clone + Eq + Zero + One + for<'x> DivAssign<&'x T> + for<'x> RemAssign<&'x T> + From<u8> + SampleUniform,
    for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>, 
Expand description

Solve: $x^2 ≡ a \pmod p$

Requires: a is non-negative integer. p is prime. If equation has at least one root, this function returns Some(x). x is a root. If equation has no root, this function returns None.

use algebraic_equation_over_finite_prime_field::sqrt_over_mod_p;
// two roots
let x = sqrt_over_mod_p::<i32>(5, &11).unwrap();
assert!(x == 4 || x == 7);
let x = sqrt_over_mod_p::<i32>(2, &7).unwrap();
assert!(x == 3 || x == 4);
let x = sqrt_over_mod_p::<i32>(3, &13).unwrap();
assert!(x == 4 || x == 9);
let x = sqrt_over_mod_p::<i32>(8, &17).unwrap();
assert!(x == 5 || x == 12);
// one root
assert_eq!(sqrt_over_mod_p::<i32>(0, &3), Some(0));
// no root
assert_eq!(sqrt_over_mod_p::<i32>(2, &3), None);