Cod sursa(job #31363)

Utilizator azotlichidAdrian Vladu azotlichid Data 15 martie 2007 21:39:15
Problema Kperm Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>

#define FOR(i, N, M) for (int i = (int)(N); i <= (int)(M); ++i)
#define REP(i, N) for (int i = 0; i < (int)(N); ++i)

typedef long long LL;

const int MODULO = 666013;
int N, K;

int fact(int x)
{
    int r = 1;
    FOR(i, 1, x) r = ((LL)r * (LL)i) % MODULO;
    return r;
}

int pow(int x, int y)
{
    int r = 1;
    REP(i, y) r = ((LL)r * (LL)x) % MODULO;
    return r;
}

int main(void)
{
    freopen("kperm.in", "r", stdin);
    freopen("kperm.out", "w", stdout);
    scanf("%d %d", &N, &K);
    if (K % 2 == 0) { printf("0\n"); return 0; }
    LL Ans = ( fact(N%K) * fact(K - (N%K)) ) % MODULO;
    Ans = ( Ans * pow( fact(1 + N/K), N%K ) ) % MODULO;
    Ans = ( Ans * pow( fact(N/K), K - (N%K))) % MODULO;
    printf("%lld\n", Ans);
    return 0;
}