Pagini recente » Cod sursa (job #2398151) | Cod sursa (job #627755) | Cod sursa (job #2889479) | Cod sursa (job #607673) | Cod sursa (job #465761)
Cod sursa(job #465761)
#include <cstdio>
#include <algorithm>
using namespace std;
#define FIN "ratphu.in"
#define FOUT "ratphu.out"
#define MAXC 20
int P, V[MAXC], A[MAXC];
long long R, N;
void parse(long long X)
{
int i;
for (i = 1; X; ++ i) V[i] = X % 10, X /= 10;
V[0] = i - 1;
}
long long fact(int X)
{
int i;
long long A = 1;
for (i = 1; i <= X; ++ i) A = 1LL * A * i;
return A;
}
void check()
{
int i;
long long B = 1, A;
for (i = V[0], A = 0; i ; -- i, B *= 10)
A += B * V[i];
if (A % P == 0)
++ R;
}
void solve()
{
int i, j;
parse(N);
if (P == 2)
{
for (i = 1, j = 0; i <= V[0]; ++ i)
if (V[i] % 2 == 0)
++ j;
R = 1LL * j * fact(V[0] - 1);
return;
}
if (P == 3)
{
for (i = 1, j = 0; i <= V[0]; ++ i)
j += V[i];
if (!(j % 3))
{
R = fact(V[0]);
return;
}
}
if (P == 5)
{
for (i = 1, j = 0; i <= V[0]; ++ i)
if (V[i] == 5 || V[i] == 0)
++ j;
R = 1LL * j * fact(V[0] - 1);
return;
}
sort(V + 1, V + V[0] + 1);
do
{
check();
} while (next_permutation(V + 1, V + V[0] + 1));
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%I64u", &N);
scanf("%d", &P);
solve();
printf("%I64u\n", R);
}