Pagini recente » Cod sursa (job #109714) | Cod sursa (job #182885) | Cod sursa (job #1064840) | Cod sursa (job #2695540) | Cod sursa (job #164067)
Cod sursa(job #164067)
#include <cstdio>
#include <cstring>
const int N = 5000;
const int NP = 700;
const int MOD = 2000003;
int n, k;
int np, pr[NP];
int ans;
int f[NP];
void ciur() {
bool* prime = new bool[n+1];
memset(prime,true,n+1);
prime[0] = prime[1] = false;
for (int i = 2; i <= n; ++i) {
if (prime[i]) {
pr[np++] = i;
for (int j = 2; i*j <= n; ++j) prime[i*j] = false;
}
}
// Un fleac, m-au ciuruit
}
void add ( int x, int w ) {
for (int i = 0; i < np; ++i) {
for (; x % pr[i] == 0; x /= pr[i], f[i] += w);
}
}
int main() {
freopen("sandokan.in","rt",stdin);
freopen("sandokan.out","wt",stdout);
scanf("%d %d",&n,&k);
ciur();
int r;
for (r = n; r >= k; r -= k-1);
for (int i = 2; i <= n-k+1; ++i) add(i,1);
for (int i = 2; i <= r; ++i) add(i,-1);
for (int i = 2; i <= n-k+1-r; ++i) add(i,-1);
ans = 1;
for (int i = 0; i < np; ++i) {
for (int j = 0; j < f[i]; ++j) {
ans = (ans*pr[i]) % MOD;
}
}
printf("%d\n",ans);
return 0;
}