Pagini recente » Cod sursa (job #2388912) | Cod sursa (job #3276628) | Cod sursa (job #1876933) | Cod sursa (job #3166418) | Cod sursa (job #3276578)
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
#define int long long
const int Nmax=18;
int dp[(1<<Nmax)][20];
int pw[20];
signed main()
{
int n,p;
fin>>n>>p;
vector<int> cifre;
pw[0]=1;
for(int i=1;i<=18;i++) pw[i]=pw[i-1]*10;
while(n)
{
cifre.push_back(n%10);
n=n/10;
}
n=cifre.size();
dp[0][0]=1;
for(int mask=1;mask<(1<<n);mask++)
{
int cnt=__builtin_popcount(mask);
for(int rest=0;rest<p;rest++)
{
for(int bit=0;bit<n;bit++)
{
if((mask&(1<<bit))!=0)
{
int nr=pw[cnt-1]*cifre[bit];
int need=(rest+p-(nr%p))%p;
dp[mask][rest]+=dp[mask^(1<<bit)][need];
}
}
}
}
fout<<dp[(1<<n)-1][0]<<'\n';
return 0;
}