Pagini recente » Cod sursa (job #1000627) | Cod sursa (job #2315194) | Cod sursa (job #565789) | Cod sursa (job #2296423) | Cod sursa (job #164000)
Cod sursa(job #164000)
#include <stdio.h>
#include <math.h>
int i,j,k,n,m,d,x;
int a[5010],prim[5010],na[5010];
long long comb(int p, int q)
{
m=0;
for (i=2; i<=p; i++)
{
int gas=1;
for (d=2; d<=sqrt(i); d++)
if (i%d==0)
{
gas=0;
break;
}
if (gas)
{
m++;
prim[m]=i;
}
}
//calculez p!/q! = (q+1) * (q+2) * ... * p
for (i=q+1; i<=p; i++)
{
k=i;
for (j=1; j<=m; j++)
if (k>1)
{
while (k%prim[j]==0)
{
k/=prim[j];
na[j]++;
}
}
else break;
}
//impart la (p-q)!
for (i=2; i<=p-q; i++)
{
k=i;
for (j=1; j<=m; j++)
if (k>1)
{
while (k%prim[j]==0)
{
k/=prim[j];
na[j]--;
}
}
else break;
}
long long sol=1;
for (i=1; i<=m; i++)
for (j=1; j<=na[i]; j++)
sol=(sol*prim[i])%2000003;
return sol;
}
int main()
{
freopen("sandokan.in","r",stdin);
freopen("sandokan.out","w",stdout);
scanf("%d %d",&n,&k);
d=n%(k-1);
if (d==0) d=k-1;
long long sol=comb(n-1,d-1);
printf("%lld\n",sol);
return 0;
}