Pagini recente » Cod sursa (job #2071405) | Cod sursa (job #3287133) | Cod sursa (job #2943517) | Cod sursa (job #1545996) | Cod sursa (job #2260260)
#include <cstdio>
const int MOD = 2000003;
int FactFreq[6000], NrFactori;
int CombFact(int, int);
void InvMod(int, int, int&, int&);
int lgput(int a, int b);
int main()
{
freopen("sandokan.in", "r", stdin);
freopen("sandokan.out", "w", stdout);
int N, K;
scanf("%i %i", &N, &K);
K = (N % (K - 1) == 0 ? K - 1 : N % (K - 1));
printf("%i\n", CombFact(N - 1, K - 1));
return 0;
}
int lgput(int a, int b) {
int sol = 1, n = a;
for(int i = 0; (1 << i) <= b; i++) {
if(b & (1 << i))
sol = 1LL * sol * n % MOD;
n = 1LL * n * n % MOD;
}
return sol;
}
void InvMod(int a, int b, int &x, int &y)
{
if(!b)
{
x = 1;
y = 0;
}
else
{
InvMod(b, a % b, x, y);
int aux;
aux = x;
x = y;
y = aux - (a / b) * y;
}
}
int CombFact(int N, int K)
{
/// C(N, K) = N! * (N-K)!^(-1) * K!^(-1)
int Result = 1, Fact = 1;
for(int i = N - K + 1; i <= N; ++i)
Result = 1LL * Result * i % MOD;
for(int i = 2; i <= K; ++i)
Fact = 1LL * Fact * i % MOD;
int x, y;
InvMod(Fact, MOD, x, y);
return 1LL * Result * lgput(Fact, MOD - 2) % MOD;
}