Pagini recente » Cod sursa (job #2888922) | Cod sursa (job #1606940) | Cod sursa (job #1711343) | Cod sursa (job #2771377) | Cod sursa (job #1422852)
#include <cstdio>
#include <cstring>
#define NMAX 1 << 18
#define LMAX 21
using namespace std;
int n, m, k;
char s[LMAX];
long long Dp[NMAX][LMAX];
int main() {
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
scanf("%d", &k);
for(int i = 0; i < n; ++i)
s[i] -= '0';
m = (1 << n) - 1;
Dp[0][0] = 1;
for(int mask = 0; mask < m; ++mask)
for(int p = 0; p < k; ++p) {
if(!Dp[mask][p])
continue;
for(int i = 0; i < n; ++i)
if(!(mask & (1 << i))) {
int new_mask = mask | (1 << i);
int new_p = (p * 10 + s[i]);
while(new_p >= k)
new_p -= k;
Dp[new_mask][new_p] += Dp[mask][p];
}
}
printf("%lld\n", Dp[m][0]);
return 0;
}