Cod sursa(job #1258429)
Utilizator | Data | 8 noiembrie 2014 20:58:24 | |
---|---|---|---|
Problema | Kperm | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.61 kb |
#include<fstream>
using namespace std;
#define MOD 666013
ifstream fin("kperm.in");
ofstream fout("kperm.out");
long long n,k,p,r,F[5005];
long long pow(long long N, long long K)
{
long long sol=1;
while (K)
{
if (K&1) sol*=N, sol%=MOD;
N*=N, N%=MOD;
K>>=1;
}
return sol;
}
int main()
{
long long i;
fin>>n>>k;
if (!(k&1))
{
fout<<"0\n";
return 0;
}
p=n/k, r=n%k;
for (i=1,F[0]=1;i<=n;++i)
F[i]=F[i-1]*i%MOD;
fout<<F[r]*F[k-r]%MOD*pow(F[p+1],r)%MOD*pow(F[p],k-r)%MOD<<"\n";
return 0;
}