コンテンツにスキップ

Factorial

階乗 \(n!\) とその逆元 \(\frac{1}{n!}\) をmodで計算する.

関数

std::tuple<std::vector<long long>, std::vector<long long> > calc_factorial(const int n, const long long MOD);

整数 n と素数 MOD に対して, タプル (fact, ifact) を返す. factifact は長さ nstd::vector<long long> であり,各要素の値は以下のようになる.

\[ \begin{eqnarray*} &\mathrm{fact[i]} = i! \mod \mathrm{MOD} \\ &\mathrm{ifact[i]} = \frac{1}{i!} \mod \mathrm{MOD} \end{eqnarray*} \]