Pagini recente » Cod sursa (job #1293244) | Cod sursa (job #2497528) | Cod sursa (job #968945) | Cod sursa (job #2158595) | Cod sursa (job #3292264)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream in("ratphu.in");
ofstream out("ratphu.out");
int p;
long long n;
in >> n >> p;
vector<int> digits;
while (n) {
digits.push_back(n % 10);
n /= 10;
}
n = (int)digits.size();
vector<long long> pw(n + 1, 1);
for (int i = 1; i <= n; i++) {
pw[i] = pw[i - 1] * 10;
}
vector<vector<long long>> dp((1 << n), vector<long long>(p + 1, 0));
dp[0][0] = 1;
for (long long mask = 1; mask < (1LL << n); mask++) {
int cnt = __builtin_popcount(mask);
for (int r = 0; r < p; r++) {
for (int bit = 0; bit < n; bit++) {
if ((mask & (1 << bit)) != 0) {
long long val = pw[cnt - 1] * digits[bit], need = (r + p - (val % p)) % p;
dp[mask][r] += dp[mask ^ (1 << bit)][need];
}
}
}
}
out << dp[(1 << n) - 1][0];
return 0;
}