Pagini recente » Cod sursa (job #588871) | Cod sursa (job #2725984) | Cod sursa (job #3293310) | Cod sursa (job #753980) | Cod sursa (job #467708)
Cod sursa(job #467708)
#include <cstdio>
#include <cassert>
using namespace std;
#define MAXN 18
#define MAXP 20
#define LL long long
LL N; int P;
int cif[MAXN];
LL nr[1 << MAXN][MAXP];
int main() {
freopen("ratphu.in", "rt", stdin);
#ifndef DEBUG
freopen("ratphu.out", "wt", stdout);
#endif
scanf("%lld %d", &N, &P);
assert(1 <= N && N < 1000000000000000000LL);
assert(1 <= P && P <= 20);
int len = 0;
for (; N; N /= 10) {
cif[len] = N % 10;
len += 1;
}
nr[0][0] = 1;
for (int i = 0; i < (1 << len); i++) {
for (int j = 0; j < P; j++) {
if (!nr[i][j]) {
continue;
}
for (int k = 0; k < len; k++) {
if (i & (1 << k)) {
continue;
}
nr[i | (1 << k)][(j * 10 + cif[k]) % P] += nr[i][j];
}
}
}
printf("%lld\n", nr[(1 << len) - 1][0]);
return 0;
}