Pagini recente » Cod sursa (job #2625087) | Cod sursa (job #2593209) | Cod sursa (job #2797485) | Cod sursa (job #1209068) | Cod sursa (job #1343032)
#include <fstream>
#include <vector>
#define MOD 2000003
using namespace std;
ifstream fin ("sandokan.in"); ofstream fout ("sandokan.out");
int N,K,num,fr[5010];
vector <int> V;
void Ciur()
{ for(int i=2;i<=N;i++)
if(!fr[i])
{ V.push_back(i);
for(int j=i+i;j<=N;j+=i) fr[j]=1;
}
}
long long Lg_Put(long long x, int p)
{ long long val=1;
while(p)
{ if(p&1) val=val*x%MOD;
x=x*x%MOD; p>>=1;
}
return val;
}
void Comb(int n, int k)
{ for(int i=k+1;i<=n;i++)
{ int nr=i,j=0;
while(V[j]*V[j]<=nr)
{ while(nr%V[j]==0) {fr[V[j]]++; nr/=V[j];}
j++;
}
if(nr>1) fr[nr]++;
}
for(int i=2;i<=n-k;i++)
{ int nr=i,j=0;
while(V[j]*V[j]<=nr)
{ while(nr%V[j]==0) {fr[V[j]]--; nr/=V[j];}
j++;
}
if(nr>1) fr[nr]--;
}
}
int main()
{ fin>>N>>K;
Ciur();
memset(fr,0,sizeof(fr));
num=N%(K-1);
if(num==0) num=K-1;
Comb(N-1,num-1);
long long sol=1;
for(int i=2;i<=N;i++)
if(fr[i]) sol=sol*Lg_Put(i,fr[i])%MOD;
fout<<sol<<'\n'; fout.close(); return 0;
}