Cod sursa(job #2238178)

Utilizator lucametehauDart Monkey lucametehau Data 4 septembrie 2018 19:46:45
Problema Sandokan Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>

using namespace std;

ifstream cin ("sandokan.in");
ofstream cout ("sandokan.out");

const int MOD = 2000003;

int n, k;

int lgput(int a, int b) {
  int sol = 1, n = a;
  for(int i = 0; (1 << i) <= b; i++) {
    if(b & (1 << i))
      sol = 1LL * sol * n % MOD;
    n = 1LL * n * n % MOD;
  }
  return n;
}

int inv(int n) {
  return lgput(n, MOD - 2);
}

int comb(int n, int k) {
  int sol = 1, fact = 1;
  for(int i = n - k + 1; i <= n; i++)
    sol = 1LL * sol * i % MOD;
  for(int i = 2; i <= k; i++)
    fact = 1LL * fact * i % MOD;
  return 1LL * sol * inv(fact) % MOD;
}

int main() {
  cin >> n >> k;
  k = (n % (k - 1) == 0 ? k - 1 : n % (k - 1));
  cout << comb(n, k - 1);
  return 0;
}