Cod sursa(job #1994444)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 24 iunie 2017 23:09:44
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

FILE *fin = fopen("sandokan.in", "r"), *fout = fopen("sandokan.out", "w");

#define MOD 2000003

inline int lgput(int a, int n) {
    int r = 1;
    while (n > 0) {
        if (n % 2)
            r = 1LL * r * a % MOD;
        n /= 2;
        a = 1LL * a * a % MOD;
    }
    return r;
}

int main() {
    int n, k;
    fscanf(fin, "%d%d", &n, &k);

    n--;
    k = n % (k - 1);

    int ans = 1;
    for (int i = 2; i <= n; i++)
        ans = 1LL * ans * i % MOD;

    int c = lgput(ans, MOD - 2);
    for (int i = n; i >= 0; i--) {
        if (i == k) ans = 1LL * ans * c % MOD;
        if (i == n - k) ans = 1LL * ans * c % MOD;
        c = 1LL * c * i % MOD;
    }

    fprintf(fout, "%d\n", ans);

    fclose(fin);
    fclose(fout);
    return 0;
}