Cod sursa(job #3220659)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 4 aprilie 2024 16:43:29
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
//#include "main.h"

using namespace std;

ifstream fin("sandokan.in");
ofstream fout("sandokan.out");
const long long mod = 2000003;
long long n, k, p, fact[5002];

static inline void PrecalcFact(int n) {
    fact[0] = fact[1] = 1;
    for(int i = 1; i <= n; i++) fact[i] = 1LL * (fact[i - 1] * i) % mod;
}

static inline int Put(long long a, long long n) {
    long long p = 1;
    while(n) {
        if(n & 1) p = 1LL * (1LL * p * a) % mod;
        a = 1LL * (1LL * a * a) % mod;
        n >>= 1;
    }
    return p;
}

static inline long long Inv(long long a) {
    return Put(a, mod - 2);
}

static inline long long Comb(long long n, long long k) {
    if(n < k) return 0;
    return (1LL * (fact[n] * Inv(fact[n - k] * fact[k] % mod)) % mod);
}

int main() {
    PrecalcFact(5000);

    fin >> n >> k;
    p = (n - 1) % (k - 1) + 1;
    fout << Comb(n - 1, p - 1);

    return 0;
}