競プロにおいて分割数は を 個の非負整数の和で表す方法の数 (ただし, 順番は区別しない) であり, 計算量オーダーが である dp が(蟻本などに載っており)有名である
しかし, 一般に数論の世界で分割数というと を自然数の和で表す方法 であり, である
これは同じ dp をすると かかってしまうが, である場合に限りより高速な方法がある
まず, の母関数を考える
を何個使うか, を何個使うか.... ということを考えると,
と書くことができる
と表せるため,
として, の母関数を求めることができた
できたが, 求めるのが簡単にはなっていない
ここで, 右辺の逆数である について考えてみる
これは, オイラーの五角数定理 より
と書くことができる
凄まじく非自明だが, 証明も大変
ヤコビの三重積 から証明する方法, ヤング図形との対応から頑張る方法, Shanksによる天下り式な証明 などがあります 暇だったら書きます
について求められればいいので
と書ける
これは簡単に求めることができて, NTT-friendly な mod でならニュートン法を用いて逆数を で求めることができる
そうでない場合, さらに式変形をする
と
を掛け合わせて
と書ける
の項の係数に注目することで
という式が出てくる
したがって, 漸化式
が得られる
この式を用いて愚直に求めていくことで, で求めることができる
Library Checker さんの Partition Function で verify できる