Pagini recente » Cod sursa (job #2933246) | Cod sursa (job #1815866) | Cod sursa (job #381424) | Cod sursa (job #2882617) | Cod sursa (job #476683)
Cod sursa(job #476683)
#include <algorithm>
#include <stdio.h>
#define MAX 1 << 18
#define ll long long
using namespace std;
ll n;
int p, cf;
int rest[32], cifra[32], biti[32];
ll sol[MAX][20];
int main()
{
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
scanf("%lld %d", &n, &p);
rest[0] = 1;
for (int i = 1; i <= 20; i++)
rest[i] = (rest[i - 1] * 10) % p;
for (cf = 0; n; n /= 10)
cifra[cf++] = n % 10;
sol[0][0] = 1;
for (int i = 0; i < (1 << cf); i++)
{
biti[i] = biti[i / 2] + (i & 1);
for (int j = 0; j < cf; j++)
if (!(i & (1 << j)))
{
int ad = (cifra[j] * rest[biti[i]]) % p;
for (int r = 0; r < p; r++)
sol[i | (1 << j)][(r + ad >= p)? r + ad - p : r + ad] += sol[i][r];
}
}
printf("%lld\n", sol[(1 << cf) - 1][0]);
fclose(stdin);
fclose(stdout);
return 0;
}