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);