Pagini recente » Cod sursa (job #3179548) | Cod sursa (job #1254546) | Cod sursa (job #2246348) | Cod sursa (job #465584) | Cod sursa (job #2816987)
#include <fstream>
#include <vector>
using namespace std;
long long dp[(1 << 19)][20];
int main(){
ifstream cin("ratphu.in");
ofstream cout("ratphu.out");
long long n;
int p;
cin >> n >> p;
dp[0][0] = 1;
vector <int> cif;
long long cn = n;
while(cn > 0){
cif.push_back(cn % 10);
cn /= 10;
}
vector <int> zeros;
for(int mask = 0; mask < (1 << cif.size()); ++ mask){
for(int bit = 0; bit < cif.size(); ++ bit){
if(mask & (1 << bit)){
continue;
}
zeros.push_back(bit);
}
for(int rest = 0; rest < p; ++ rest){
for(auto &bit : zeros){
dp[mask | (1 << bit)][(rest * 10 + cif[bit]) % p] += dp[mask][rest];
}
}
zeros.clear();
}
cout << dp[(1 << cif.size()) - 1][0];
return 0;
}