Cod sursa(job #386691)

Utilizator DraStiKDragos Oprica DraStiK Data 25 ianuarie 2010 18:35:28
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <algorithm>
using namespace std;

#define ll long long
#define MOD 666013
#define DIM 5005

ll n,k,c,r,nrt;
ll fact[DIM];

ll lgput (ll n,ll p)
{
    ll rez;

    for (rez=1; p; p>>=1)
    {
        if (p&1)
            rez=(rez*n)%MOD;
        n=(n*n)%MOD;
    }

    return rez;
}

void solve ()
{
    ll i;

    fact[0]=1;
    for (i=1; i<=n; ++i)
        fact[i]=(fact[i-1]*i)%MOD;
    c=n/k; r=n%k;
    nrt=(fact[r]*fact[k-r])%MOD;
    nrt=(nrt*lgput (fact[c+1],r))%MOD;
    nrt=(nrt*lgput (fact[c],k-r))%MOD;
    printf ("%lld",nrt);
}

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

    scanf ("%lld%lld",&n,&k);
    if (k&1)
        solve ();
    else
        printf ("0");

    return 0;
}