Pagini recente » Cod sursa (job #1782207) | Cod sursa (job #1646567) | Cod sursa (job #1557471) | Cod sursa (job #126223) | Cod sursa (job #2783713)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
int n, p;
char s[20];
long long dp[(1 << 18) + 3][20];
int a[25];
long long P[25][25], putere[20];
vector <int> bit[(1 << 18) + 3];
int main()
{
int i, j;
fin >> s;
for(i = 0;s[i];i++)
a[n++] = s[i] - '0';
long long N = (1 << n) - 1;
fin >> p;
putere[0] = 1;
for(i = 1;i <= 18;i++)
putere[i] = 2 * putere[i - 1];
for(i = 0;i <= 20;i++)
for(j = 0;j <= 20;j++)
P[i][j] = (10 * i + a[j]) % p;
int stare;
int z;
for(stare = 0;stare <= N;stare++)
for(j = 0;j < n;j++)
if((putere[j] & stare) == 0)
bit[stare].push_back(j);
dp[0][0] = 1;
int k;
for(stare = 0;stare <= N;stare++)
for(j = 0;j < p;j++)
for(k = 0; k < bit[stare].size(); k++)
{
z = bit[stare][k];
dp[stare + putere[z]][P[j][z]] += dp[stare][j];
}
fout << dp[N][0];
return 0;
}