Pagini recente » Cod sursa (job #116934) | Cod sursa (job #488763) | Cod sursa (job #2269253) | Cod sursa (job #280401) | Cod sursa (job #170962)
Cod sursa(job #170962)
#include<stdio.h>
#define N 2000003
int main () {
freopen("sandokan.in","r",stdin);
freopen("sandokan.out","w",stdout);
int n,k,v[5000],i,p=1,j,aprim[5000],bprim[5000],cn,ck,q=0;
scanf("%d%d",&n,&k);
//for(i=0;i<n;++i)
// scanf("%d",&v[i]);
cn=n;
while(cn>=k)
cn=cn-k+1;
k=cn;
--n;--k;
for(i=0;i<=n;++i)
aprim[i]=bprim[i]=1;
for(i=2;i<=n;++i)
if(aprim[i])
for(j=i+i;j<=n;j+=i)
aprim[j]=bprim[j]=0;
cn=n;
ck=k;
while(k){
++q;
for(i=2;i<=cn&&n!=1;++i)
if(aprim[i])
while(!(n%i)){
n/=i;
++aprim[i];
}
for(i=2;i<=ck&&k!=1;++i)
if(bprim[i])
while(!(k%i)){
k/=i;
++bprim[i];
}
n=cn-q;
k=ck-q;
}
for(i=2;i<=cn;++i){
if(bprim[i]>1)
aprim[i]-=bprim[i];
if(bprim[i]==1)
--aprim[i];
}
for(i=2;i<=cn;++i)
while(aprim[i]>=1){
p=((p%N)*(i%N))%N;
--aprim[i];
}
printf("%d\n",p);
return 0;
}