Cod sursa(job #2135069)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 18 februarie 2018 16:18:39
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
#define MOD 2000003
#define dimm 5005
#define ll long long

std::ifstream f("sandokan.in");
std::ofstream g("sandokan.out");

ll fact[dimm];
void precalc() {
    fact[0] = 1;
    for (int i=1; i<dimm; i++)
        fact[i] = fact[i-1]*i % MOD;
}

ll fast_exp(ll baza, ll exp) {
    if(exp==0) return 1;
    if(exp%2) {
        ll v = fast_exp(baza, exp/2) % MOD;
        return baza * v % MOD * v % MOD;
    }
    ll v = fast_exp(baza, exp/2) % MOD;
    return v * v % MOD;
}
ll invers_mod(ll x) {
    ll phi = MOD-1;
    return fast_exp(x, phi-1)  % MOD;
}

ll comb(ll N, ll K) {
    return fact[N] * invers_mod(fact[K] * fact[N-K] % MOD) % MOD;
}

int main()
{
    precalc();
    ll N, K; f >> N >> K;
    int r = N%(K-1);
    if (r==0) r = K-1;
    g << comb(N-1, r-1);

    return 0;
}