형식 멱급수의 해석 연산
법 \(x^n\) 아래에서 다항식(형식 멱급수)에 대해 다음을 \(O(n \log n)\)에 계산한다.
- \(\ln A(x)\) (단, \(A(0) = 1\))
- \(\exp A(x)\) (단, \(A(0) = 0\))
- \(A(x)^k\), \(\sqrt{A(x)}\) 등 파생 연산
모든 것의 토대는 다항식 역원 \(A^{-1} \bmod x^n\)이고, 그 위에 뉴턴 반복 을 얹는다.
뉴턴 반복의 원리
근사해 \(B_t \equiv\) (정답) \(\bmod x^{2^t}\)가 있을 때, 한 번의 갱신으로 정밀도를 두 배(\(x^{2^{t+1}}\))로 올린다. 방정식 \(F(B) = 0\)을 풀 때:
$$ B_{t+1} = B_t - \frac{F(B_t)}{F'(B_t)} \pmod{x^{2^{t+1}}}. $$
형식 멱급수에서도 같은 공식이 성립하며, 정밀도가 매 단계 두 배가 되어 총비용은 마지막 곱의 비용이 지배해 \(O(n \log n)\).
역원: \(F(B) = 1/B - A\)
B_{t+1} = B_t (2 - A B_t) (mod x^{2^{t+1}})
\(A(0) \ne 0\) 필요. 초기값 \(B_0 = A(0)^{-1}\).
로그: 적분으로 환원
\(A(0) = 1\)일 때, \(\ln A\)의 미분이 핵심이다.
$$ \frac{d}{dx}\ln A = \frac{A'}{A} \;\Rightarrow\; \ln A = \int \frac{A'(x)}{A(x)}\, dx. $$
따라서:
- \(A'\)를 계산(계수 \(a_k \to k a_k\)).
- \(A^{-1} \bmod x^{n}\)를 뉴턴법으로.
- \(A' \cdot A^{-1}\) (NTT 곱).
- 항별 적분(\(c_k \to c_{k-1}/k\)). 상수항은 \(\ln A(0) = \ln 1 = 0\).
뉴턴 없이 역원만으로 끝난다. \(O(n \log n)\).
지수: \(F(B) = \ln B - A\)
\(A(0) = 0\)일 때 \(\exp A\)를 뉴턴법으로. \(F(B) = \ln B - A\), \(F'(B) = 1/B\)이므로
$$ B_{t+1} = B_t \big(1 - \ln B_t + A\big) \pmod{x^{2^{t+1}}}. $$
매 단계 내부에서 \(\ln B_t\)를 계산해야 하므로 로그(=역원)가 필요하다. 초기값 \(B_0 = 1\). 정밀도 두 배씩, 총 \(O(n \log n)\).
거듭제곱과 제곱근
- \(A^k = \exp(k \ln A)\) (단 \(A(0)=1\); 일반은 최저차 항을 빼낸 뒤 처리).
- \(\sqrt A\): \(F(B) = B^2 - A\), \(B_{t+1} = \tfrac12(B_t + A B_t^{-1})\). \(A(0)\)의 modular 제곱근 필요.
정밀도 두 배의 직관 (오차 분석)
\(B_t\)의 오차가 \(O(x^{2^t})\)이면, 뉴턴 갱신은 그 오차를 제곱 한다: \(O(x^{2^{t+1}})\). 이것이 차수의 두 배 증가를 보장한다. 형식 멱급수에서는 "오차"가 곧 "최저 비영 차수"이고, 곱셈이 차수를 더하므로 제곱 = 두 배.
정리
- 토대 = 다항식 역원(뉴턴).
- ln = 적분(A'/A), exp = 뉴턴(ln 내부 호출).
- pow/sqrt = exp·ln 또는 직접 뉴턴.
- 전부 \(O(n \log n)\). 다음 강의에서 구현.