Cod sursa(job #25630)

Utilizator alextheroTandrau Alexandru alexthero Data 4 martie 2007 13:12:54
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

#define modulo 666013

long long n,k;

int main() {
    freopen("kperm.in","r",stdin);
    freopen("kperm.out","w",stdout);
    
    scanf("%lld%lld",&n,&k);

    if(k % 2 == 0) {
        printf("0\n");
        return 0;
    }

    long long n1 = n % k;
//    if(n1 == 0) n1 = k;
    long long n2 = k - n1;

    long long dec1 = n / k + 1;
    long long dec2 = dec1 - 1;

    long long r = 1;
    for(int i = 1; i <= n1; i++) r = ((long long)r * i) % modulo;
    for(int i = 1; i <= n2; i++) r = ((long long)r * i) % modulo;

    int c1 = 1,cc1 = 1;
    int c2 = 1,cc2 = 1;

    for(int i = 1; i <= dec1; i++) c1 = ((long long)c1 * i) % modulo;
    for(int i = 1; i <= n1; i++) cc1 = ((long long)cc1 * c1) % modulo;
    
    for(int i = 1; i <= dec2; i++) c2 = ((long long)c2 * i) % modulo;
    for(int i = 1; i <= n2; i++) cc2 = ((long long)cc2 * c2) % modulo;

    r = (long long)(((r * cc1 % modulo) * cc2) % modulo);
    printf("%lld\n",r);
    
    return 0;
}