Pagini recente » Borderou de evaluare (job #485890) | Cod sursa (job #1977684) | Cod sursa (job #2098371) | Cod sursa (job #3264376) | Cod sursa (job #657818)
Cod sursa(job #657818)
#include <fstream>
using namespace std;
ifstream f("kperm.in");
ofstream g("kperm.out");
int n,k,c,r,m=666013,i;
unsigned long long t[5001],sol;
unsigned long long lg_pow(unsigned long long b,unsigned long long p) {
unsigned long long x,r;
for (x=b,r=1;p>0;p>>=1) {
if ((p & 1) !=0)
r=r*x % m;
x=x*x%m;
}
return r%m;
}
int main () {
f >> n >> k;
if (k%2==0) {
g << 0 << '\n';
f.close();g.close();
return 0;
}
t[0]=1;
for (i=1;i<=n;i++) t[i]=(t[i-1]*i)%m;
r=n%k;c=n/k;
sol=(t[r]*t[k-r])%m;
sol=(sol*lg_pow(t[c+1],r))%m;
sol=(sol*lg_pow(t[c],k-r))%m;
g << sol << '\n';
f.close();g.close();
return 0;
}