Cod sursa(job #25765)

Utilizator victorsbVictor Rusu victorsb Data 4 martie 2007 14:29:08
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>

#define Nmax 5005
#define mod 666013

int n, k, afis;
long long sol;
long long fact[2 * Nmax];

void citire()
{
    scanf("%d %d\n", &n, &k);
}

void solve()
{
    int i, lim;
    
    if (k % 2 == 0)
    {
        printf("0\n");
        return;
    }
    
    fact[0] = fact[1] = 1;
    for (i = 2; i <= 2 * n; ++i)
        fact[i] = (fact[i-1] * i) % mod;
    
    sol = fact[n % k] * fact[k - n % k];
    sol %= mod;
    
    lim = k - (n % k);
    for (i = 1; i <= lim; ++i)
    {
        sol *= fact[n / k];
        sol %= mod;
    }
    
    lim = n % k;
    for (i = 1; i <= lim; ++i)
    {
        sol *= fact[n / k + 1];
        sol %= mod;
    }
    
    afis = sol % mod;
    
    printf("%d\n", afis);
}

int main()
{
    freopen("kperm.in", "r", stdin);
    freopen("kperm.out", "w", stdout);
    citire();
    solve();
    return 0;
}