#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 15
#define M 1100
using namespace std;
int tot,mod,l;
int a[N];
int cnt[N];
char s[N];
int f[1<<10][M];
int A[]={0,1,2,6,24,120,720,5040,40320,362880,3628800};
void dfs()
{
for(int i=0;i<(1<<l);i++)
{
for(int k=0;k<mod;k++)
{
if(f[i][k])
{
for(int j=1;j<=l;j++)
{
if((i&(1<<(j-1)))==0)
{
f[(i|(1<<(j-1)))][(k*10+a[j])%mod]+=f[i][k];
}
}
}
}
}
}
int main()
{
scanf("%d",&tot);
while(tot--)
{
scanf("%s",s);
l=strlen(s);
memset(cnt,0,sizeof(cnt));
for(int i=0;i<l;i++)
{
a[i+1]=s[i]-‘0‘;
cnt[a[i+1]]++;
}
scanf("%d",&mod);
memset(f,0,sizeof(f));
f[0][0]=1;
dfs();
int ans=f[(1<<l)-1][0];
for(int i=0;i<=9;i++)
{
if(cnt[i])ans/=A[cnt[i]];
}
printf("%d\n",ans);
}
}
原文地址:http://blog.csdn.net/wzq_qwq/article/details/46366399