haar_lib/math/fps/
log.rs

1//! 形式的冪級数の対数
2use crate::math::fps::inv::*;
3use crate::math::polynomial::{Polynomial, PolynomialOperator};
4use crate::num::ff::*;
5
6/// 形式的冪級数の対数
7pub trait FpsLog {
8    /// 多項式の型
9    type Poly;
10
11    /// $f(x) = \sum_0^{n-1} a_ix^i$について、$\log (f(x))$の先頭$n$項を求める。
12    fn fps_log(&self, f: Self::Poly) -> Self::Poly;
13}
14
15impl<const P: u32, const PR: u32> FpsLog for PolynomialOperator<'_, P, PR> {
16    type Poly = Polynomial<P>;
17
18    fn fps_log(&self, f: Self::Poly) -> Self::Poly {
19        assert_eq!(f.coeff_of(0).value(), 1);
20        let n = f.len();
21        let a = self.differentiate(f.clone());
22        let b = self.fps_inv(f);
23        let c = self.mul(a, b);
24        let mut ret = self.integrate(c);
25        ret.as_mut().resize(n, 0.into());
26        ret
27    }
28}