Guide to modular arithmetic (plus tricks) [CodeChef edition] [There is no other edition]

Can you post your code? You may have miswritten nCk, because it works for me

More specifically:

My code
const ll mod = 998244353;

long long mpow(long long a, long long b) {
  long long x = 1;
  while (b > 0) {
    if (b & 1) {
      x = (x * a) % mod;
    }
    a = (a * a) % mod;
    b >>= 1;
  }
  return x;
}

long long fact[101];
long long ifact[101];
long long nck(long long n, long long k) {
  long long dem = (ifact[k] * ifact[n - k]) % mod;
  return (fact[n] * dem) % mod;
}

void solve(int tc) {
  n = 100;
  
  fact[0] = fact[1] = 1;
  for (int i = 2; i <= n; i++) {
    fact[i] = (fact[i - 1] * i) % mod;
  }
  
  ifact[n] = mpow(fact[n], mod - 2);
  for (int i = n - 1; i >= 0; i--) {
    ifact[i] = ((i + 1) * ifact[i + 1]) % mod;
  }

  cout << nck(6, 0) << " " << nck(6, 3) << endl;
}

outputs 1 20 as expected.

1 Like