Pagini recente » Cod sursa (job #659213) | Cod sursa (job #701876) | Cod sursa (job #1808121) | Cod sursa (job #1951424) | Cod sursa (job #1255998)
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 50011
#define MOD 666013
using namespace std;
ifstream f("kperm.in");
ofstream g("kperm.out");
int n,c,k,r,q1,q2,q3,q4;
vector<int> p;
bitset<DIM> viz;
void ciur(){
for(register int i=2;i<n+11;i++)
if(!viz[i]){
p.push_back(i);
for(register int j=i+i;j<n+11;j+=i) viz[j]=1;
}
}
inline int up(int a,int b){
if(b==1)
return a;
else{
int q=up(a,b/2);
q*=q,q%=MOD;
if(b%2) q*=a;
return q%MOD;
}
}
inline int factorial(int x){
int i,k,t,sol=1;
for(i=0;i<p.size() && p[i]<=x;i++){
k=p[i],t=0;
while(k<=x)
t+=x/k,k*=p[i];
sol*=up(p[i],t);
sol%=MOD;
}
return sol;
}
int main(void){
f>>n>>k
if(!k){
g<<"0";
return 0;
}
ciur();
r=n%k,c=n/k;
q1=factorial(r),q2=factorial(k-r);
q3=factorial(c+1),q3=up(q3,r);
q4=factorial(c),q4=up(q4,k-r);
q1=(((q1*q2)%MOD)*((q3*q4)%MOD))%MOD;
g<<q1;
return 0;
}