Pagini recente » Cod sursa (job #2255825) | Cod sursa (job #275010) | Cod sursa (job #974678) | Cod sursa (job #1883437) | Cod sursa (job #1434192)
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
long long N;
int P, i;
ifstream f("ratphu.in");
f >> N >> P;
f.close();
int digitsOfN = log10(N) + 1;
long long maxL = 1 << (digitsOfN + 1);
long long d[maxL][P];
for (i = 0; i < maxL; i++)
fill(d[i], d[i] + P, 0);
int digits[digitsOfN], k = 0;
while(N)
{
digits[k] = N % 10;
N /= 10;
k++;
}
int j, upperBound = 1 << digitsOfN;
d[0][0] = 1;
for (i = 0; i < upperBound; i++)
for (j = 0; j < digitsOfN; j++)
if ((i & (1 << j)) == 0)
for (k = 0; k < P; k++)
d[i | (1 << j)][(k * 10 + digits[j]) % P] += d[i][k];
ofstream g("ratphu.out");
g << d[upperBound - 1][0];
g.close();
return 0;
}