Pagini recente » Cod sursa (job #63656) | Cod sursa (job #1738403) | Cod sursa (job #1739743) | Cod sursa (job #2895579) | Cod sursa (job #168876)
Cod sursa(job #168876)
#include<stdio.h>
#define rest 2000003
char p[5100];
int prim[2000],put[2000];
void ver1(int i){
int i1=i,j=0;
while(i>1 && prim[j]<=i1){
while(i%prim[j]==0){
i/=prim[j];
++put[j];
}
++j;
}
}
void ver2(int i){
int i1=i,j=0;
while(i>1 && prim[j]<=i1){
while(i%prim[j]==0){
i/=prim[j];
--put[j];
}
++j;
}
}
int main(){
freopen("sandokan.in","r",stdin);
freopen("sandokan.out","w",stdout);
int n,k,i,j,x,y;
long long sum=1;
scanf("%d%d",&n,&k);
for(i=4;i<=5050;i+=2)
p[i]=1;
for(i=3;i<=5050;i+=2){
if(p[i]==0)
for(j=i*i;j<=5000;j+=i)
p[j]=1;
}
prim[0]=2;
j=1;
for(i=3;i<=5050;i+=2){
if(p[i]==0)
prim[j++]=i;
}
x=j;
y=n;
while(y>=k)
y=y-(k-1);
for(i=n-y+1;i<n;++i)
ver1(i);
for(i=2;i<y;++i)
ver2(i);
for(i=0;i<x;++i){
while(put[i]){
sum=(sum*prim[i])%rest;
--put[i];
}
}
printf("%lld\n",sum);
fclose(stdin);
fclose(stdout);
return 0;
}