Pagini recente » Cod sursa (job #1262276) | Cod sursa (job #649516) | Cod sursa (job #1939839) | Cod sursa (job #2350752) | Cod sursa (job #1370724)
#include<stdio.h>
int p, ncif, d[1 << 18][25], notUsed[25], dig[25];
void bkt (int k, int cfig) {
if(k == ncif) {
int i, r, rnew;
for(r = 0; r < p; ++ r)
for(i = 1; i <= notUsed[0]; ++ i) {
rnew = (r * 10 + dig[notUsed[i]]) % p;
d[cfig | (1 << notUsed[i])][rnew] += d[cfig][r];
}
return;
}
notUsed[++ notUsed[0]] = k;
bkt(k + 1, cfig);
-- notUsed[0];
bkt(k + 1, cfig | (1 << k));
}
int main() {
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
long long n;
scanf("%lld%d", &n, &p);
ncif = -1;
do {
dig[++ ncif] = n % 10;
n /= 10;
}while(n);
++ncif;
d[0][0] = 1;
bkt(0, 0);
printf("%d\n", d[(1 << ncif) - 1][0]);
return 0;
}