Pagini recente » Cod sursa (job #1232775) | Cod sursa (job #1364737) | Cod sursa (job #2044519) | Cod sursa (job #48186) | Cod sursa (job #25615)
Cod sursa(job #25615)
#include<stdio.h>
#define Q 666013
#define NMAX 5096
void read();
void solve();
int upg(int x, int y);
//void bkt(int x);
int N, K, P[NMAX], temp[16];
int main()
{
freopen("kperm.in", "r", stdin);
freopen("kperm.out", "w", stdout);
read();
/* bkt(0);
printf("%d\n", rezz);*/
solve();
return 0;
}
void read()
{
scanf("%d%d", &N, &K);
}
void solve()
{
int i;
long long rez;
if(K % 2 == 0)
{
printf("0\n");
return;
}
P[0] = 1;
P[1] = 1;
for(i = 2; i <= N; i++)
P[i] = ((long long)P[i - 1] * i) % Q;
rez = P[N % K];
rez *= P[K - (N % K)];
rez %= Q;
rez *= upg(P[(N / K) + 1], N % K);
rez %= Q;
rez *= upg(P[N / K], K - (N % K));
rez %= Q;
printf("%d\n", rez);
}
int upg(int x, int y)
{
long long i, rez = 1;
int j;
for(i = x, j = 0; (1 << j) <= y; i = (i * i) % Q, j++)
temp[j] = i;
for(;j >= 0; j--)
if(y >= (1 << j))
rez *= temp[j], rez %= Q, y -= 1 << j;
return rez;
}
/*void bkt(int x)
{
if(x == N)
{
int sum = 0, i;
for(i = 0; i < K; i++)
sum += st[i], sum %= K;
if(sum) return;
for(i = K; i < N; i++)
if((st[i] - st[i % K]) % K) return;
rezz++, rezz %= Q;
return;
}
for(int i = 1; i <= N; i++)
if(!seen[i])
{
seen[i] = 1, st[x] = i;
bkt(x + 1);
seen[i] = 0;
}
}*/