Pagini recente » Cod sursa (job #2331996) | Cod sursa (job #711180) | Cod sursa (job #1931658) | Cod sursa (job #2859773) | Cod sursa (job #1414246)
#include <cstdio>
#define MOD 2000003
using namespace std;
bool pm[5010];
int prim[5010], exp[5010], k;
inline void ciur (int n)
{
for (int i = 2; i <= n; ++i)
if (!pm[i])
{
prim[++k] = i;
for (int j = i * i; j <= n; j += i)
pm[j] = true;
}
}
int main ()
{
freopen ("sandokan.in", "r", stdin);
freopen ("sandokan.out", "w", stdout);
int n, p;
scanf ("%d %d", &n, &p);
--n;
--p;
ciur (n);
for (int i = 1; i <= k; ++i)
{
for (int h = prim[i]; h <= n; h *= prim[i])
exp[i] += n / h;
}
for (int i = 1; i <= k; ++i)
{
for (int h = prim[i]; h <= p; h *= prim[i])
exp[i] -= p / h;
}
for (int i = 1; i <= k; ++i)
{
for (int h = prim[i]; h <= n - p; h *= prim[i])
exp[i] -= (n - p) / h;
}
long long rez = 0LL;
for (int i = 1; i <= k; ++i)
{
bool OK = false;
long long h = 1LL;
for (int j = 1; j <= exp[i]; ++j)
{
h *= 1LL * prim[i];
h %= MOD;
OK = true;
}
if (OK)
{
rez += 1LL * h;
rez %= MOD;
}
}
if (rez) printf ("%lld\n", rez);
else printf ("1\n");
return 0;
}