Cod sursa(job #164105)

Utilizator tvladTataranu Vlad tvlad Data 23 martie 2008 15:36:27
Problema Sandokan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#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;
}