Cod sursa(job #490649)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 7 octombrie 2010 11:34:11
Problema Kperm Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define MOD     666013
#define maxM    5010

int Perm[maxM];

int log_pow (int A, int N) {
    if (N == 1)
        return A;
    int x = log_pow(A, N / 2);
    x = 1LL * x * x % MOD;
    if (N % 2 == 1)
        return 1LL * x * A % MOD;
    return x;
}

int main () {
    int N, K, i, P, rest;

    freopen("kperm.in", "r", stdin);
    freopen("kperm.out", "w", stdout);

    scanf("%d%d", &N, &K);

    P = N / K;
    rest = N - P * K;

    for (i = 2, Perm[1] = 1; i <= K; ++ i)
        Perm[i] = (Perm[i - 1] * i) % MOD;

    printf("%d\n", (int) 1LL * (1LL * log_pow(Perm[P + 1], rest) *  Perm[rest] % MOD) * (1LL * log_pow(Perm[P], K - rest) * Perm[K - rest] % MOD) % MOD);

    return 0;
}