Cod sursa(job #1779204)

Utilizator silkMarin Dragos silk Data 14 octombrie 2016 22:25:35
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#define NMax 5000

const int MOD = 2000003;

int v[NMax+1];

void lgput(int& X, int B)
{
    int A=1;
    while(B>1)
    {
        if(B%2) { A=(1LL*A*X)%MOD; X=(1LL*X*X)%MOD; }
        else X=(1LL*X*X)%MOD;
        B/=2;
    }
    X = (1LL*X*A) % MOD;
}

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

    int i,N,K,up,down;

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

    K = (N-1)%(K-1);
    --N;
    for(up = 1, i = N-K+1; i <= N; ++i) up = ( 1LL * up * i ) % MOD;
    for(down = 1, i = 1; i <= K; ++i) down = ( 1LL * down * i ) % MOD;

    lgput(down,MOD-2);

    printf("%d\n", ( 1LL *
                    up * down ) % MOD );




return 0;
}