dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::{
    euler_totient_with_trial_division_i64::phi,
    greatest_common_divisor_euclidean_recurse_i64::gcd,
    modular_power_recurse_i64::pow,
};

pub fn modinv(
    modulus: i64,
    x: i64,
) -> i64 {
    assert_eq!(gcd(modulus, x), 1);

    pow(modulus, x, phi(modulus) - 1)
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        const MOD: i64 = 1_000_000_007;

        const INV: i64 = (MOD + 1) >> 1;

        assert_eq!(modinv(MOD, 2), INV);
    }
}