Pagini recente » Cod sursa (job #514133) | Cod sursa (job #1213647) | Cod sursa (job #1060516) | Cod sursa (job #1795474) | Cod sursa (job #1264916)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
const int CONFMAX=262150;
const int PMAX=21;
int p,len,cif[PMAX],fr[11],fact[PMAX];
long long n,dp[CONFMAX][PMAX];
map<int,int>viz;
int main()
{
int i,conf,maxim,aux,auxx;
fin>>n>>p;
while (n)
{
cif[len]=n%10;
len++;
//fr[n%10]++;
n/=10;
}
for (i=0;i<len;i++) viz[1<<i]=i;
maxim=1<<len;
for (conf=1;conf<maxim;conf++)
if (viz.find(conf)!=viz.end())
{
aux=cif[viz[conf]];
dp[conf][aux%p]=1;
}
else
{
aux=conf;
while (aux)
{
auxx=aux^(aux&(aux-1));
aux-=auxx;
for (i=0;i<p;i++)
dp[conf][(i*10+cif[viz[auxx]])%p]+=dp[conf-auxx][i];
}
}
/*fact[1]=1;
for (i=2;i<=20;i++) fact[i]=1LL*fact[i-1]*i;
for (i=0;i<=9;i++)
if (fr[i]!=0)
dp[maxim-1][0]=1LL*dp[maxim-1][0]*fact[fr[i]];*/
fout<<dp[maxim-1][0]<<"\n";
return 0;
}