Pagini recente » Cod sursa (job #2659681) | Cod sursa (job #1490801) | Cod sursa (job #109654) | Cod sursa (job #2643873) | Cod sursa (job #2560622)
#include <cstdio>
#include <deque>
#pragma warning (disable:4996)
using namespace std;
deque <int> c;
long long n, p, dp[1 << 18][20]; //dp[i][j] = numarul de posibilitati cu cifrele din masca i, pentru a se obtine un numar j % p;
int main()
{
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
scanf("%lld %lld", &n, &p);
while (n)
{
c.push_front(n % 10);
n /= 10;
}
dp[0][0] = 1;
int len = c.size();
for (int i = 0; i < (1 << len); ++i)
for (int j = 0; j < p; ++j)
if (dp[i][j])
for (int k = 0; k < len; ++k)
if ((i & (1 << k)) == 0)
dp[i | (1 << k)][(j * 10 + c[k]) % p] += dp[i][j];
printf("%lld", dp[(1 << len) - 1][0]);
return 0;
}