public BinomialCoefficient(int n) { fact = new ModInt[n + 1]; ifact = new ModInt[n + 1]; fact[0] = 1; for (int i = 1; i <= n; i++) { fact[i] = fact[i - 1] * i; } ifact[n] = ModInt.Inverse(fact[n]); for (int i = n - 1; i >= 0; i--) { ifact[i] = ifact[i + 1] * (i + 1); } ifact[0] = ifact[1]; }
public static ModInt Pow(ModInt value, long k) { return(Pow(value.value_, k)); }
public static ModInt Inverse(ModInt value) { return(Pow(value, P - 2)); }