階乗 (factorial)

概要

\(0 \le K \le N\) について \(K!\) (MOD \(10^9 + 7\)) を計算する。

また、\(0 \le K \le N\) について \(K! \times R \equiv 1\) (MOD \(10^9 + 7\)) となるような \(R\) を求める。

計算量

\(O(N)\)

実装

MOD = 10**9 + 7
N = 10**5

fact = [1]*(N+1)
rfact = [1]*(N+1)
r = 1
for i in range(1, N+1):
  fact[i] = r = r * i % MOD
rfact[N] = r = pow(fact[N], MOD-2, MOD)
for i in range(N, 0, -1):
  rfact[i-1] = r = r * i % MOD

# nPk (mod MOD) を求める
def perm(n, k):
  return fact[n] * rfact[n-k] % MOD

# nCk (mod MOD) を求める
def comb(n, k):
  return fact[n] * rfact[k] * rfact[n-k] % MOD