Pagini recente » Cod sursa (job #2053014) | Cod sursa (job #2570007) | Cod sursa (job #1068631) | Cod sursa (job #1800524) | Cod sursa (job #465845)
Cod sursa(job #465845)
#include <stdio.h>
#define LMAX 35
#define ll long long
int b,cif[LMAX],r,s,ap[LMAX];
ll a,sol,act,fact[LMAX];
char viz[LMAX];
void back(int k)
{
if (k==r+1)
{
if (act % b==0)
sol++;
return ;
}
int i;
for (i=1; i<=r; i++)
if (!viz[i])
{
act=act*10+cif[i];
viz[i]=1;
back(k+1);
viz[i]=0;
act/=10;
}
}
int main()
{
freopen("ratphu.in","r",stdin);
freopen("ratphu.out","w",stdout);
scanf("%lld%d",&a,&b);
while (a)
{
s+=a%10;
cif[++r]=a%10;
ap[a%10]++;
a/=10;
}
fact[0]=1;
int i;
for (i=1; i<=r; i++)
fact[i]=fact[i-1]*i;
if (b==3 && s%3==0)
{
printf("%lld\n",fact[r]);
return 0;
}
if (b==9 && s%9==0)
{
printf("%lld\n",fact[r]);
return 0;
}
if (b==10 && ap[0])
{
printf("%lld\n",fact[r-1]*ap[0]);
return 0;
}
if (b==5 && ap[0]+ap[5]>0)
{
printf("%lld\n",fact[r-1]*(ap[0]+ap[5]));
return 0;
}
back(1);
printf("%lld\n",sol);
return 0;
}