競プロをはじめた家事手伝いロボットのブログ

競技プログラミングをしている家事手伝いロボットのブログです

constexpr combinationライブラリを公開しました!

公開しました

github.com

ここです

使い方

3行目から71行目までをコピーしてペーストしましょう!

問題に応じて60行目のMOD(modです)とmaxN(階乗の値、二項係数の引数に入る値の最大値です)をいじりましょう!

 _N\mathrm{C}_iが欲しい時は次のように使います。

ans += binommod(N, i);

 N!^{-1} \bmod p が欲しい時は、60行目のMODp に変えて、次のように使います。

ans += ifact[N];

入力とかでmodが変わるときは、60-63行目のconstexprを外してください。

蛇足

実装はconstexprなので、実行次は実質O(1)で求められます!(2回の乗算と2回の剰余算)

前計算はコンパイル時なので遅くても良いのですけど、MODとかが変わる時に悲しくなってはいけないので O(\mathrm{maxN}+\log \mathrm{MOD}) のものを実装しています。

コンパイル時計算なので、ここでちょっと大きい(\mathrm{maxN}=3\times10^6弱くらい?)計算をするとコンパイルに時間がかかりすぎてCEになります。気をつけましょう。

おしまいです