Pagini recente » Cod sursa (job #2689461) | Cod sursa (job #795327) | Cod sursa (job #273265) | Cod sursa (job #2566261) | Cod sursa (job #478386)
Cod sursa(job #478386)
#include <algorithm>
#include <cstdio>
#include <vector>
#define maxCif 19
#define maxP 22
using namespace std;
long long N;
int P;
long long D[1 << 18][maxP];
vector <int> digits;
int main() {
int i, j;
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
scanf("%lld%d", &N, &P);
D[0][0] = 1;
while (N > 0) {
digits.push_back(N % 10);
N /= 10;
}
// printf("%d\n", digits.size());
// reverse(digits.begin(), digits.end());
for (int mask = 0; mask < (1 << digits.size()); mask++)
for (i = 0; i < P; i++) {
// printf("%d %d %lld\n", mask, i, D[mask][i]);
for (j = 0; j < digits.size(); j++)
if ((mask & (1 << j)) == 0) {
D[mask | (1 << j)][(i * 10 + digits[j]) % P] += D[mask][i];
}
}
printf("%lld\n", D[(1 << digits.size()) - 1][0]);
return 0;
}