Pagini recente » Cod sursa (job #1630520) | Cod sursa (job #1381450) | Cod sursa (job #616283) | Cod sursa (job #2320306) | Cod sursa (job #1322439)
#include <stdio.h>
using namespace std;
#define maxc 18
#define maxr 22
long n, r, i, j, k, pt, v[maxc+10], conf[maxc+10];
long long d[(1<<maxc)+100][maxr];
long long nr;
int main()
{
freopen("ratphu.in", "r", stdin);
freopen("ratphu.out", "w", stdout);
scanf("%lld%d", &nr, &r);
while(nr>0)
{
v[++v[0]]=nr%10;
nr=nr/10;
}
n=v[0];
d[0][0]=1;
for(i=0; i<(1<<n)-1; ++i)
{
pt=1;
for(j=0; j<n; ++j)
{
conf[j]=((i>>j)&1);
if(conf[j])
pt=(pt*10)%r;
}
for(j=0; j<r; ++j)
{
if(d[i][j]==0) continue;
for(k=0; k<n; k++)
if(conf[k]==0)
d[i|(1<<k)][(j+(pt*v[k+1]))%r]+=d[i][j];
}
}
printf("%lld\n", d[(1<<n)-1][0]);
return 0;
}