haar_lib/num/
ff.rs

1//! 有限体$\mathbb{F}_p$
2pub use crate::num::zz::*;
3use std::ops::{Div, DivAssign};
4
5/// 有限体$\mathbb{F}_p$
6pub trait FF: ZZ<Element: FFElem> + Clone {
7    /// `a/b`を生成する。
8    fn frac(&self, a: i64, b: i64) -> Self::Element {
9        self.from_i64(a) / self.from_i64(b)
10    }
11}
12
13/// 有限体$\mathbb{F}_p$の元
14pub trait FFElem: ZZElem + Div<Output = Self> + DivAssign {
15    /// `self`の乗法の逆元を返す。
16    fn inv(self) -> Self {
17        self.pow(self.modulo() as u64 - 2)
18    }
19}